Siempre puede validar el rendimiento en este sitio y en varios navegadores: jsperf.com ... Estos son algunos casos de prueba para explorar: jsperf.com/browse
iwasrobbed
Respuestas:
164
Actualizar:
Cometí una prueba después de un comentario y cuatro votos a favor para cada comentario. Resulta que lo que dije es la respuesta correcta. Aquí está el resultado:
El ises multipropósito, por ejemplo, puede hacerlo is('.class'), is(':checked')etc., lo que significa que istiene más que ver donde hasClassestá limitado, lo que solo verifica si una clase está configurada o no.
Por lo tanto, hasClassdebería ser más rápido si el rendimiento en cualquier nivel es su prioridad.
@SgtPooki, simplemente estaba pidiendo una prueba; si era cierto, quería saber por qué. Soy curioso así :). Puede tener fácilmente más funcionalidad y hacer que sea más rápido; siempre depende de la implementación. Su 99% es una gran generalización y no necesariamente el verdadero estado del desarrollo de software. Su pregunta de "¿Será jQuery alguna vez tan rápido como JavaScript? Una respuesta distinta a no es incorrecta". no es una buena pregunta; jQuery en realidad tiene muchas optimizaciones que proporcionarán un acceso más rápido a los elementos DOM una vez que los datos se almacenan en caché; realmente depende de su uso específico.
Kris
1
@SgtPooki en cuanto a velocidad, eche un vistazo al motor selector de chispas; como sigo mencionando, depende de la implementación y en los navegadores más antiguos que no admiten consultas de forma nativa, lo más probable es que sea más rápido a través de la implementación de jQuery ya que no hay una versión nativa (win por defecto). Además, si continúa recordando los mismos elementos DOM, según el navegador y la versión, puede llevar más tiempo, ya que jQuery puede almacenar en caché este elemento para una recuperación más rápida. Normalmente, las funciones nativas de JavaScript serán más rápidas; pero depende del soporte y la implementación del navegador.
Kris
13
Dado que ises más genérico que hasClassy se utiliza filterpara procesar la expresión proporcionada, parece probable que hasClasssea más rápido.
Ejecuté el siguiente código desde la consola de Firebug:
No es una gran diferencia, pero puede ser relevante si está realizando muchas pruebas.
EDITAR cuando digo 'no es una gran diferencia, mi punto es que necesitas hacer 10000 ciclos para ver 0.8s de diferencia. Me sorprendería ver una aplicación web en la que cambiar de isa hasClassvería una mejora significativa en el rendimiento general. Sin embargo, reconozco que se trata de una mejora del 35% en la velocidad.
Respuestas:
Actualizar:
Cometí una prueba después de un comentario y cuatro votos a favor para cada comentario. Resulta que lo que dije es la respuesta correcta. Aquí está el resultado:
http://jsperf.com/hasclass-vs-is-so
El
is
es multipropósito, por ejemplo, puede hacerlois('.class')
,is(':checked')
etc., lo que significa queis
tiene más que ver dondehasClass
está limitado, lo que solo verifica si una clase está configurada o no.Por lo tanto,
hasClass
debería ser más rápido si el rendimiento en cualquier nivel es su prioridad.fuente
hasClass
es mucho más rápido.Dado que
is
es más genérico quehasClass
y se utilizafilter
para procesar la expresión proporcionada, parece probable quehasClass
sea más rápido.Ejecuté el siguiente código desde la consola de Firebug:
Tengo:
No es una gran diferencia, pero puede ser relevante si está realizando muchas pruebas.
EDITAR cuando digo 'no es una gran diferencia, mi punto es que necesitas hacer 10000 ciclos para ver 0.8s de diferencia. Me sorprendería ver una aplicación web en la que cambiar de
is
ahasClass
vería una mejora significativa en el rendimiento general. Sin embargo, reconozco que se trata de una mejora del 35% en la velocidad.fuente
Ambos deberían ser bastante similares en términos de rendimiento, pero me
$('#foo').hasClass('bar');
parecen más legibles y semánticamente correctos.fuente
.hasClass
es mucho más rápido de lo que.is
puedes probar desde aquí . Cambie el caso de prueba según usted.fuente