Credo che nessuno mi possa dare torto se affermo che una delle più belle caratteristiche del framework ASP.NET AJAX è la possibilità di usare dei semplici ASMX per caricare dati sul client da elaborare e trasformare in informazioni visive. Il lavoro che sto realizzando in questo periodo mi sta spingendo ad usare pesantemente questa caratteristica allo scopo di migliorare notevolmente le prestazioni di una applicazione. Motivo per cui mi sono reso conto di una serie di regole "auree" che dovrebbero sempre essere seguite per minimizzare i dati in transito e quindi ottenere un boost delle prestazioni notevole soprattutto se si è in presenza di oggetti custom (non primitivi) ripetuti numerose volte. l'elenco che segue non vuole essere esaustivo, ma sono certo che possa essere un buon punto di partenza:
1) Create sempre delle classi specifiche per il trasferimento dei dati verso il client. Questo vi consente di applicare le regole con il massimo rendimento. Potrete ad esempio usare un nome come "MO" al posto di MyObject. Con una semplicissima mappatura di informazioni potreste risparmiare molto e mantenere il meglio delle naming-conventions nel codice C#.
2) Mettete sempre i tipi creati per il trasferimento nel namespace globale. Per capire il motivo proviamo ad analizzare come gli ScriptService serializzano gli oggetti in JSON
{
"__type":"Company.Namespace.DomainModel.MyObject",
"Id":"8907c0cf-3e66-485d-ba6a-13fcdaf41256",
"Longitude":12.690935134887695,
"Latitude":45.951854705810547
}
Nella prima riga si vede che viene riportato per esteso il tipo dell'oggetto serializzato e questo avviene per ogni singola istanza. Per questo motivo inserire gli oggetti nel namespace globale perlomeno elimina tutta la porzione di nome che riguarda il namespace garantendo un notevole guadagno
3) Sempre guardando la pozione di codice si vede che il tipo di dato double viene riportato con una precisione notevole. nel mio caso tale precisione non è necessaria pertanto grazie ad una Math.Round(double, 5) risparmio ulteriori 10 byte per ogni double. Da questo si evince che la scelta dei tipi e l'analisi delle funzionalità che dobbiamo erogare possono portarci a migliorare di molto i risultati che otterremo. Un esempio analogo è il Guid riportato nello spezzone di codice che potrebbe essere trasformato in un intero, sempre che l'applicazione lo permetta.
4) Abbreviate all'estremo i nomi delle proprietà e dei tipi. Proprio per questo è opportuno usare dei tipi specifici, che ci consentiranno di usare dei nomi telegrafici allo scopo di risparmiare spazio nella trasmissione. nel mio caso il codice può tranquillamente diventare il seguente:
{
"__type":"MO",
"Id":"223342739",
"Lng":12.69093,
"Lat":45.95185
}
5) usate estensivamente la Web Development Helper che vi consente di tracciare la trasmissione e di valutare quando la mole di dati da trasferire sta diventando eccessiva.
Può sembrare banale ma vi garantisco che su grandi quantità di istanze i risultati si vedono e sono molto corposi. Personalmente sono passato da 2250 byte a 1048 byte per solamente 10 istanze in un array. in pratica ogni 100 istanze ho un guadagno netto di ~12Kbyte che mi sembrano un numero di tutto rispetto.