2013-02-12 9 views
6

Recentemente ho letto alcuni articoli relativi alle prestazioni di jQuery e ho trovato alcune domande strane.

  • Posso/devo memorizzare nella cache $(window)?

    Se lo facessi, sarebbe influenzare resize, scroll, width, scrollTop ... ecc?

  • Can/dovrei cache di $(document)?

    Come usiamo un sacco di azioni del mouse, devo fare var doc = $(document);?

  • Posso sempre di cache $(this) in un grande blocco di codice?

    Per quanto riguarda var self = $(this);, in quali condizioni che self potrebbe essere diverso da $(this)?

+0

È possibile memorizzare nella cache '$ (finestra)', ma il profilo per verificare se questo è stato utile per l'applicazione? –

+0

usando 'var self = $ (this)' è utile quando '$ (this)' potrebbe cambiare in base all'ambito, e hai bisogno di un riferimento all'originale '$ (this)' – xdumaine

+0

Per favore non chiamarlo caching, perché non è. Stai semplicemente salvando qualcosa in una variabile. La cosa più vicina alla cache è '$ .cache' – Johan

risposta

9

Tutte e tre le domande: Sì, è possibile!

Neccessery: no

Migliore prestazione: forse

si potrebbe provare e fare un punto di riferimento. Ma il motivo per il caching non è quello di cercare in tutto il DOM il tuo selettore. Cercare documenti e finestre non è un problema perché sono 2 variabili radice. Il caching $ (questo) dipende dalla situazione. Vedi il mio secondo suggerimento.

memorizzare nella cache sempre l'oggetto principale di eseguire query su:

var header = $('#header'); 

var menu = header.find('.menu'); 
// or 
var menu = $('.menu', header); 

E 'meglio catena metodi di jQuery che per memorizzare nella cache i selettori:

$('li.menu-item').click(function() {alert('test click');}) 
        .css('display', 'block') 
        .css('color', 'red') 
        fadeTo(2, 0.7); 

gli elementi di cache che si query spesso:

var header = $('#header'); 
var divs = header.find('div'); 
var forms = header.find('form'); 

Un consiglio prestazioni gratis:

selettori fastes al più lento:

Id > Tag > classes 
+3

Questo è quello che stavo leggendo in questi giorni. Puoi concentrarti sulle 3 domande che ho posto? – user1643156

+0

Bene le prime 2 domande, No. Potresti provare a fare un punto di riferimento. Ma il motivo per il caching non è quello di cercare in tutto il DOM il tuo selettore. Cercare documenti e finestre non è un problema perché sono 2 variabili radice. Il caching $ (questo) dipende dalla situazione. Vedi il mio secondo suggerimento. Risposta aggiornata – Timmetje

2
  1. Sì, è possibile memorizzare nella cache $ (window), e lo fa aiutare sulle prestazioni.
    Qualcuno ha già effettuato un test in jsperf. http://jsperf.com/jquery-window-cache

    Il risultato del test è di tipo incasinato, ma è ancora possibile "test Run" sul tuo browser per vedere la differenza.

  2. Sì, è possibile memorizzare anche $ (documento). Non uso molto $ (document), ma baso sul test che ho effettuato in jsperf (http://jsperf.com/document-vs-cache), la memorizzazione nella cache di $ (documento) aiuta anche le prestazioni .

  3. E sì, è possibile memorizzare nella cache $ (questo). Ma questo è diverso dagli altri cahces. Come già sapete, il valore di $ (this) cambierà a seconda della situazione. Ad esempio, se si utilizza $ (this) nel topo ascoltatore come questo ....

    $(".button").on("click",function(){ 
        var $this = $(this); 
    }); 
    

    $ (this) cambierà quando l'utente clicca sul pulsante con il "bottone" di classe , e $ ("this") diventerà l'oggetto su cui ha fatto clic l'utente .

    Il caching $ (questo) può aiutare sulle prestazioni se si utilizza $ (questo) molto all'interno della funzione. Ma ricorda che se si memorizza nella cache $ (this) all'interno della funzione , la cache diventerà una variabile locale invece globale, e verrà distrutta alla fine della funzione. Quindi non sarai in grado di usare al di fuori della funzione.

0

domanda reale è, Can I cache $(window) and $(document) in jQuery?

Se si desidera memorizzare nella cache la finestra o di un documento per un ulteriore uso nella stessa sessione, sì è possibile.

Tutte le variabili/funzioni create verranno raccolte automaticamente se l'utente chiude la finestra/sessione.

Problemi correlati