2011-05-18 9 views
7

Si sé que hay como máximo 1 objeto de este tipo en mi DOM, ¿debo agregar siempre: primero al selector para acelerar la búsqueda? Supongo que el motor de selección se detendrá tan pronto como encuentre 1 elemento coincidente, pero no estoy seguro de si el filtro realmente desacelera un poco.especifica: primero en el rendimiento de ayuda del selector de jquery?

+0

Lo dudo. Me imagino que obtiene todos los elementos y luego verifica si son el primer elemento en el contenedor de los padres. (de derecha a izquierda). – Raynos

Respuesta

6

No, como :first no es una pseudo-clase CSS estándar, y su uso hará que su selector para no pasar a la función nativa de querySelectorAll() DOM implementado mediante el apoyo a los navegadores (suponiendo que no se usa ninguna otra jQuery sólo sintaxis del selector).

jQuery tomará todo el selector y lo analizará solo (utilizando Sizzle, lo más probable), que es leguas más lento que dejar que el navegador haga el trabajo.

+0

No será tan lento como para que el ojo humano pueda observarlo, por supuesto, pero ** en teoría ** dañaría el rendimiento en lugar de ayudar. Y de nuevo, esto realmente solo se aplica si el selector es compatible con el motor de CSS del navegador y, por lo tanto, 'querySelectorAll()'. – BoltClock

+1

A su comentario: Si intenta depurar una página, donde se usa el selector 'pseudo-class': first', con respecto a Developer Tools of Chrome puede habilitar en la pestaña "Scripts" el botón "Pause on nocaught exceptions" (en El fondo). En cada selección con ': first' vería una excepción en' querySelectorAll' (vea [aquí] (http://www.trirand.com/blog/?page_id=393/bugs/small-performance-improvements-in-selectors/# p26631)). En muchos casos ': first' se puede reemplazar por': first-child' o ': nth-of-type (1)' con será rápidamente. Un uso de ': first' no es realmente lento, pero en el ciclo uno puede llenar la diferencia. – Oleg

0

Una práctica que es casi verdad; Cuantos más selectores especifique, más tendrá que validar el motor.

Por lo tanto, en su caso, si sabe que solo tiene uno, no lo especifique.

Pero con la declaración a continuación, por ejemplo, 100, ni siquiera lo notarás.