2013-06-05 18 views
7

Ho testato le differenze tra le 2 selettori di ID, il primo è normale: $('#lol') E il secondo è lo stesso ma posto tra parentesi multiple: $((((('#lol')))))jQuery prestazioni selettore: un caso curioso

ho lanciato un test su jsperf, con firefox e chrome. I risultati sono interessanti: Con firefox, il primo (selettore normale) è più lento del 40% (!!!). Con il cromo, il secondo è più lento dello 0,84%.

Perché una tale differenza? Qualcuno può spiegarlo?

jsperf.com è affidabile?

È possibile vedere il test qui:

http://jsperf.com/ghshshsrd

mi metterà alla prova su altri browser, per divertimento.

(Edit: io sono su Mac OS X, tra l'altro)

+0

Testati anche con l'opera e il safari, nessuna vera differenza. Solo firefox ha questo strano risultato – FLX

+1

non se si esegue il test da Firefox browswer, per me entrambi sono simili –

+0

Penso che il risultato proiettato mostrato nel grafico sia il colpevole –

risposta

2

Come altri hanno fatto notare, le differenze tra i risultati ottenuti per le due affermazioni è trascurabile. Anche quando è testing the same statement twice, è molto improbabile che tu produca due valori Ops/sec identici.

Inoltre notato che hai detto "un test", non "test multipli". Se il risultato sembra strano, basta ripetere il test: non dimenticare che potrebbero verificarsi risultati anomali se il tuo browser è stato affamato di risorse in un modo parziale durante un'esecuzione di test.

JSPerf è sempre stato affidabile per me - abbastanza per essere utile per dimostrare le tecniche di ottimizzazione (this being a classic example).

0

In realtà non vi è alcuna reale differenza tra entrambi i modi di selezionare un elemento (ad eccezione della leggibilità). Ho creato un nuovo banco di prova jsperf che misura maggiore obiettività il caso:

->http://jsperf.com/jquery-selector-performance-20130730

Perché il test-risultato è così strano? È più probabile che il tuo scenario di test sia impreciso rispetto a qualsiasi differenza di prestazioni reale tra entrambi i test

Puoi andare e INVERSARE l'ordine di test del test iniziale: prima controlla il codice $(((('#lol')))) e dopo questo $('#lol'). Sono certo che otterrete esattamente il risultato opposto del test corrente ;-)

Non sono un esperto in questo, ma per una parte, i browser sono molto intelligenti oggi e memorizzeranno codice/variabili javascript . Anche jQuery probabilmente memorizzerà il valore dopo la prima chiamata.