2010-08-06 4 views
7

diapositiva 30 en Paul Irish's blog mencionado:¿Es .find() más rápido que el método de selección de descendientes básicos?

$('#container').find('div.robotarm') es más rápido que $('#container div.robotarm')

es esto cierto?

+3

Yo diría que las opiniones cuentan para nada. Cree algunos puntos de referencia y ejecútelos varias veces (preferiblemente en diferentes navegadores) y verifique los resultados. Esa es la única forma de obtener una respuesta definitiva, IMO. –

+0

https://forrst.com/posts/I_ran_a_little_speed_test_on_jQuery_selectors_Y-3mQ Esto podría ayudar. – Kriem

Respuesta

5

Tal vez en una versión anterior de jQuery que fue el caso. Sin embargo, la expresión

$('#container div.robotarm') 

se normaliza a través de jQuery en

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

Así que la única razón por la $('#container div.robotarm') debería ser más lento se debe a la función de llamada de arriba. Pero, eso realmente sería una diferencia trivial.

Si esa llamada no se normalizó, sizzle (motor selector de Resigs css) se usaría para buscar ese elemento (de derecha a izquierda). Eso por supuesto sería mucho más lento.

+1

¿Alguien puede citar alguna documentación para respaldar esto? No se pudo encontrar nada en una búsqueda rápida en Google. –

2

Como usted pidió una opinión, no importa.

Siempre puede aparecer un caso en el que uno corre más rápido que el otro en un navegador bajo una determinada configuración del DOM. No es necesario dividir los pelos.

1

Esto solo es correcto cuando se busca por ID.

Pero cuando buscamos por nombre de etiqueta, se obtienen resultados diferentes en navegadores modernos donde $('div').find('p') es más lento que $('div').find('p') porque este último usa querySelector().

Cuestiones relacionadas