Domanda

Ultimamente mi chiedevo se ci fosse una differenza di prestazioni tra ripetere il selettore ancora e ancora o semplicemente usare un var e memorizzare il selettore in quello e fare riferimento ad esso.

$('#Element').dothis();

$('#Element').dothat();

$('#Element').find('a').dothat();

o solo

var Object = $('#Element');

Object.dothis();

Object.dothat();

$('a', Object).dothat();

Preferisco il secondo modo perché sembra più pulito ed è meglio mantenibile.

È stato utile?

Soluzione

C'è sicuramente una differenza di prestazioni, poiché non è necessario eseguire ogni volta sfrigolio, ma c'è anche una differenza di funzionalità. Se la dom cambia tra la 1a e la 3a chiamata, l'oggetto jQuery memorizzato nella cache conterrà comunque il vecchio set di elementi. Questo può accadere spesso se si memorizza nella cache un set e lo si utilizza in un callback.

Altri suggerimenti

Preferisco il secondo modo. Sarà più facile mantenere il codice anche se un ID elemento o una classe cambiano.

C'è un altro modo veloce. È veloce come il tuo secondo codice.

$('#Element')
   .dothis()
   .dothat()
   .find('a')
      .dothat();

spendendo sul metodo di Ghommey

var Object = $('#Element');

Object
   .dothis()
   .dothat()
   .find('a')
      .dothat();

Più veloce e memorizza l'oggetto per un uso successivo.

Il secondo modo ha un vantaggio in termini di prestazioni. Può essere o non essere eccezionale, ma è meglio. Nella prima versione, stai facendo dom traversal 4 volte, nella seconda fai solo 2.

Articolo abbastanza buono su come accelerare jQuery qui: http://net.tutsplus.com/tutorials/javascript-ajax/10-ways-to-instantly-increase-your-jquery-performance/

La memorizzazione dei risultati dalla selezione di jQuery in una variabile è più rapida. Questo perché jQuery non deve necessariamente cercare i risultati ogni volta che provi ad accedervi.

Ho messo insieme alcune metriche delle prestazioni: http://jsperf.com/jquery-selectors variabile -Vs-memorizzati

Su Chrome 26.0.1410.63 su Mac OS X 10.8.2:
Selezione: 40.276 ops / sec
Memorizzazione della variabile: 594.031.358 ops / sec

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top