di: Marco Solazzi 17 Gennaio 2012
jQuery ha un ruolo importante nel riavvicinare gli sviluppatori web a JavaScript colmando lacune e inconsistenze nelle varie implementazioni dei browser più diffusi.
Come effetto collaterale di questo successo, in alcuni sviluppatori alle prime armi è nata la convizione che jQuery sia JavaScript, gettando le basi per produzione di codice jQuery corretto ma distante da principi di performance e organizzazione, fattori da tenere sotto controllo a prescindere dal linguaggio o dalla libreria usati,
Con questo articolo iniziamo ad analizzare alcune delle più importanti tecniche di programmazione in jQuery volte a migliorare stile e performance dei nostri script lato client.
La prima causa di bassa performance in uno script JavaScript è la cattiva gestione dell'interazione fra JavaScript e DOM.
La ragione è da ricercare nell'architettura della maggior parte dei browser, in cui i motori JavaScript e DOM sono entità distinte ed indipendenti, perciò, quando selezioniamo dei tag, ad esempio con $('#mioSelettore'), il motore JavaScript deve instanziare una nuova comunicazione con il DOM.
Se nel nostro codice abbiamo poche selezioni non è un problema, ma se la nostra applicazione interagisce pesantemente con il documento, questo colloquio fra i motori può rivelarsi un pericoloso collo di bottiglia.
Ecco uno script di esempio:
//aggiunge una classe al menu
$('#menu').addClass('has_dropdown');
//modifica una proprietà CSS
$('#menu').css('max-height', '200px');
//applica un plugin
$('#menu').dropdown();
Abbiamo sollecitato l'oggetto DOM #menu per tre volte. Tutto funziona ma effettuare per tre volte una ricerca sul DOM per ottenere lo stesso elemento, per fare un parallelo con i database è come se, per estrarre tre colonne da un record, eseguissimo tre query SQL.
In questo caso la soluzione risiede nella natura propria della funzione $() di jQuery. Tale funzione, infatti, restituisce un oggetto jQuery che mantiene una lista numerata degli elementi selezionati ai quali si può far riferimento senza dover andare ad interrogare continuamente il DOM.
Per ottimizzare lo script precedente basterà quindi salvare la prima selezione in una variabile di cache:
//salva la selezione in una variabile di cache
var $menu = $('#menu');
//aggiunge una classe al menu
$menu.addClass('has_dropdown');
//modifica una proprietà CSS
$menu.css('max-height', '200px');
//applica un plugin
$menu.dropdown();
In questo modo effettuiamo la ricerca sul DOM solo una volta, lavorando sul riferimento all'oggetto jQuery. Nella maggior parte dei casi otterremo un aumento delle perfomance superiore al 50%.
Si può verificare l'esistenza del riferimento interagendo con l'indice, come si fa con un array:
console.log($menu[0]); //restituirà un elemento HTML tipo <div id="menu">...</div>
Da notare che, per convenzione ormai consolidata, ogni variabile riferita ad oggetti jQuery viene scritta con un $ iniziale, in modo da essere velocemente distinguibile all'interno degli script.
Per testare l'effettiva efficacia di questa tecnica è possibile eseguire questo test presente su jsperf.com, uno dei migliori strumenti per l'analisi delle performance JavaScript.
|
Il porting di Cut the Rope in un browser HTML5: i retroscena |
Guida jQuery MobileCreare siti mobile e applicazioni specifiche per Android, iPhone e... |
Canvas, guida praticaCanvas, tra gli elementi di HTML5 è forse quello di maggior impatto.... |
Guida jQuery UICreare siti ricchi e dinamici con jQuery UI, il progetto ufficiale... |
Ogni martedì, direttamente nella tua e-mail: guide, articoli, script, novità e approfondimenti tecnici su JavaScript.
Iscriviti alla newsletter
|
|
Corso Google AdWords Base27 Febbraio 2012 a Milano |
|
|
Corso Webmaster base12 Marzo 2012 a Milano |
|
|
Corso JQuery e Ajax per Webmaster19 Marzo 2012 a Milano |
|
|
Corso Webmaster base19 Marzo 2012 a Roma |
|
|
Corso Google AdWords Base28 Marzo 2012 a Roma |