2012-01-13 4 views
18

Existen diferencias de velocidad/eficiencia entre las dos líneas siguientes.Diferencias de rendimiento entre el uso de los selectores ": not" y ".not()"?

$("table td:not(:first-child)") 

y

$("table td").not(":first-child") 

yo creo que la primera sería mejor, ya que es quita los objetos, pero hay una diferencia real y es sustancial.

Gracias

+0

¿Has intentado medirlo? –

+7

http://jsperf.com/jquery-css3-not-vs-not –

+0

Esa puede ser más mi pregunta, no estoy seguro de cómo medirla con precisión. Asumiría que una página más pequeña no tendría problemas, pero ¿en qué punto difiere? – kwelch

Respuesta

24

Como puede ver en la prueba jsperf, :not es en promedio el doble de rápido. En general, este rendimiento probablemente sea una parte muy pequeña de su tiempo de ejecución general.

El estado jQuery docs:

El método .no() va a terminar que le proporciona más legibles selecciones que empujar selectores complejos o variables en una: no) filtro selector (. En la mayoría de los casos, es una mejor opción.

Así que realmente depende de usted decidir si las fracciones de segundo que gana superan la legibilidad.

+0

Ojalá pudiera haber seleccionado las dos como la respuesta ya que ambos respondieron la pregunta por diferentes razones. – kwelch

+0

+1 para esto porque me ayudó a entender el gráfico en jsperf. Lo he estado leyendo al revés todo este tiempo. – Richard

+1

Además, la legibilidad también es algo personal. Realmente no tengo un problema con la legibilidad de: no. Especialmente en comparación con otras cosas que veo que hacen los codificadores que son mucho menos legibles. – rooby

13

Depende del navegador.

navegadores que soportan querySelectorAll conseguirá un aumento de rendimiento con ...

$("table td:not(:first-child)") 

... porque es un selector válida. Los navegadores anteriores (IE7 y versiones inferiores) no lo harán. Sin embargo, aunque debe tener cuidado con el selector :not(). jQuery (Sizzle) lo amplía con selectores no estándar, por lo que es fácil romper qSA.