2012-08-31 12 views
6

Tengo un elemento principal con una gran cantidad de elementos secundarios (1000). Estoy buscando la manera más rápida posible de manejar el último elemento secundario. Las opciones que he encontrado son:

$('.parent .child').last() 

y

$('.parent .child:last') 

Cualquier opinión sobre cuál es fiable en todos los navegadores más rápido?

EDITAR

me escribió un ensayo en el jsFiddle para medir esto y resulta que la diferencia es prácticamente insignificante. Aunque .last() tuvo un mejor rendimiento, la diferencia es insignificante. Entonces, creo que incluso con el último selector, en realidad está obteniendo toda la lista de elementos y luego devolviendo el último elemento. Increíble.

violín:http://jsfiddle.net/techfoobar/GFb9f/8/

+0

Consideremos un caso de prueba jsperf para tales preguntas .. –

+1

duplicado: http://stackoverflow.com/questions/4262928/jquery-what-is-faster-selectors-or-methods –

+0

@pst - nunca ha utilizado jsperf. Gracias por señalar. Sin embargo, he creado un violín para medirlo. Enlace en la pregunta actualizada. – techfoobar

Respuesta

5

Muchos navegadores modernos soportan document.querySelectorAll(), por lo $('.parent .child').last() debería ser más rápido, como la cadena de selección se puede pasar como es, y luego el último elemento coincidente se desprendió.

En este último caso, el :last no es un pseudo selector estándar, y Sizzle tiene que comenzar a fragmentar la cadena del selector para comenzar la coincidencia.

Sin embargo, en general, utilizaría lo que crea que es más legible. Para comenzar a optimizar esto, primero asegúrese de que su aplicación tenga problemas de rendimiento y haya identificado este selector como el cuello de botella.

+0

¿Cómo decide Sizzle si es posible pasar un selector tal como está o no? – zerkms

+0

@zerkms Desde la memoria, envuelve una llamada en try/catch, y analiza su cadena en el bloque catch. Sin embargo, no he verificado la fuente recientemente. – alex

+0

@ zerkms -Estoy seguro de que está ahí en la fuente ... – RobG

1

Tienes que ver esto performance test!

ACTUALIZACIÓN: Ya hay buenas respuestas en este related question.

+0

http://jsperf.com/selecting-the-first - ya hay uno mejor – zerkms

+0

Gracias @RobinMaben - por los enlaces. Muy informativo. Supongo que iré con .last() ya que se adapta a mi gusto por la legibilidad y el rendimiento. – techfoobar

+1

@techfoobar: Acabo de escanear tu blog. Cosas ordenadas. Totalmente de acuerdo con * 'el código que no se puede leer no debería haber sido escrito' *. :) –

Cuestiones relacionadas