2012-12-17 12 views
6

Io uso spesso $(this) all'interno di gestori di eventi jQuery e non lo memorizzo mai. Se farò

var $this = $(this); 

e userò variabile anziché il costruttore, sarà il mio codice ottenere qualsiasi significativa performance migliore?


prova JS Perf per misurare il guadagno di prestazioni da questa ottimizzazione: http://jsperf.com/jquery-this-caching

+0

Dipende dalla frequenza con cui viene utilizzato. '$ (this)' costruisce un nuovo oggetto jQuery e tutto ciò che ne consegue. Generalmente, se userai '$ (this)' più di una volta in un blocco di codice, dovresti memorizzarlo nella cache. Soprattutto se lo fai in un ciclo. – Shmiddty

+1

Sarà sempre più veloce mettere in cache '$ (this)' in una var. La micro-ottimizzazione è certa. Hai sicuramente bisogno di mettere in cache tutti i selettori, perché questo ha implicazioni molto più grandi. –

+0

Se lo si valuta 100 volte all'interno dello stesso stack di chiamate, è possibile ottenere 1 o 2 millisecondi di esecuzione più lenta. –

risposta

9

Un minuscolissima minuscola impercettibile uno, sì. Significativo? No.

Ogni volta che si esegue $(this), risultano diverse chiamate di funzione e un paio di allocazioni di memoria. Le chiamate di funzione non sono né qui né lì (anche su IE6, ero surprised to learn), ma il tasso di abbandono della memoria potrebbe sommarsi sui browser che non gestiscono molto bene la gestione della memoria. I più moderni lo fanno.

Salva sempre il risultato in una variabile, perché non mi piace chiamare le funzioni e allocare inutilmente gli oggetti. E salva la digitazione di quei paren. :-)

+2

applico solo la stessa regola che faccio in tutte le altre mie programmazioni. Se sto chiamando la stessa funzione più di una volta all'interno di una funzione, memorizzo il risultato in cache, quindi non devo chiamarlo più di una volta. '$()' è una chiamata di funzione. Lo usavo come guida per 30 anni. – jfriend00

+0

@ jfriend00: Sì, anche io (e un periodo di tempo sorprendentemente simile ...). –

3

Sì, perché ogni volta che si fa $(this) si crea un nuovo oggetto jQuery.
Ma non sarà possibile ottenere una prestazione notevole, solo se lo si fa più di 1000x

Ed è una buona pratica per gli oggetti di cache utilizzato più di una volta.

Problemi correlati