2010-08-06 7 views
7

diapositive 30 in Paul Irish's blog menzionati:È .find() più veloce del metodo di selezione del discendente di base?

$('#container').find('div.robotarm') è più veloce di $('#container div.robotarm')

è vero?

+3

Direi che le opinioni non valgono nulla. Crea alcuni benchmark ed eseguili più volte (preferibilmente su browser diversi) e controlla i risultati. Questo è l'unico modo per ottenere una risposta definitiva, IMO. –

+0

https://forrst.com/posts/I_ran_a_little_speed_test_on_jQuery_selectors_Y-3mQ Questo potrebbe aiutare. – Kriem

risposta

5

Forse in una versione precedente di jQuery era il caso. Tuttavia, l'espressione

$('#container div.robotarm') 

viene normalizzato mediante jQuery in

$('#container').find('div.robotarm') 

Quindi l'unica ragione $('#container div.robotarm') dovrebbe essere più lenta a causa della chiamata di funzione sovraccarico. Ma sarebbe davvero una differenza banale.

Se quella chiamata non è stata normalizzata, sizzle (motore di selezione CSS Resigs) verrebbe utilizzato per cercare quell'elemento (da destra a sinistra). Questo naturalmente sarebbe molto più lento.

+1

Qualcuno può citare qualche documentazione per eseguire il backup di questo? Impossibile trovare qualcosa su una ricerca rapida su google. –

2

Dal momento che hai chiesto un parere, non importa.

È sempre possibile trovare un caso in cui uno si esegue più rapidamente dell'altro in alcuni browser con una determinata configurazione del DOM. Non c'è bisogno di dividere i capelli.

1

Questo è corretto solo durante la ricerca per ID.

Ma quando eseguiamo la ricerca per nome tag, restituisce risultati diversi nei browser moderni in cui $('div').find('p') è più lento di 10 poiché quest'ultimo utilizza querySelector().

Problemi correlati