2013-07-19 11 views
10

Ho provato a trovare una risposta e ho trovato una domanda correlata, e mentre confermano i miei risultati (that one multiple selector call is slower than multiple single selector calls) nessuno di loro mi dice perché.Selettore multiplo rispetto al rendimento del selettore singolo

fondamentalmente, quando si esegue questo codice:

$("#one, #two").hide(); 
$("#one, #two").show(); 

Contro questo codice:

$("#one").hide(); 
$("#two").hide(); 
$("#one").show(); 
$("#two").show(); 

Poi quest'ultimo sarà più veloce di circa il 50%.

Tuttavia, una volta aggiunto un terzo selettore, la differenza di prestazioni è del 39% più veloce.

Quarta differenza di selezione: 26% più veloce.

Quinto: 30% più veloce.

Sesto: 31% più veloce.

Dieci: 31% più veloce.

(Do atto questi valori sembrano variare di circa un margine del 5%)

in modo da ottenere qualcosa che assomiglia a questo:

enter image description here

L'andamento sembra plateau circa 6 selettori. Non sembra mai essere più veloce di essere il 31% più lento rispetto a ciascuno di essi attraverso una singola chiamata. Perché è quello?

Personalmente, mi piace usare più selettori per chiamata, ma sembra avere un (relativamente) grande successo di prestazioni. Quando sarebbe (non) appropriato usare?

+1

Interessante. Avevo sempre pensato che il primo caso (multiplo) sarebbe stato più veloce. Che dire dei selettori di classe, prestazioni simili? –

+0

Questa è stata anche la mia ipotesi, quindi sono rimasto sorpreso da questo. Non ho controllato i selettori di classe, ma vale la pena esaminare. Farò dei test più tardi. – Johannes

+0

Non sono sicuro di * relativamente grande *. Il 50% più veloce non significherà molto nell'immagine grande se il codice di riferimento è già in esecuzione al microsecondo. –

risposta

4

In entrambi i casi si opera su ID, quindi può essere convertito in chiamata nativa getElementById.

Tuttavia, nel primo caso 2 cose aggiuntive deve essere fatto

  1. Il coma deve essere processato, per cui v'è l'analisi supplementare coinvolto
  2. I 2 risultati devono essere uniti, con la quale il funzionamento della jQuery asserts that they are returned in the same order as in DOM

Immagino che la seconda operazione richieda più tempo.