Escuché varias veces que el activo más fuerte de jQuery es la forma en que consulta y manipula elementos en el DOM: puede usar consultas CSS para crear consultas complejas que serían muy difíciles de hacer en JavaScript normal. Sin embargo, hasta donde yo sé, puede lograr el mismo resultado con document.querySelector
o document.querySelectorAll
, que son compatibles con Internet Explorer 8 y versiones posteriores.
Entonces la pregunta es esta: ¿por qué 'arriesgar' los gastos generales de jQuery si su activo más fuerte se puede lograr con JavaScript puro?
Sé que jQuery tiene más que solo selectores de CSS, por ejemplo, navegador cruzado AJAX, buena vinculación de eventos, etc. ¡Pero su parte de consulta es una parte muy importante de la fortaleza de jQuery!
¿Alguna idea?
fuente
querySelector
métodos. (3) Hacer llamadas AJAX es mucho más rápido y fácil con jQuery. (4) Soporte en IE6 +. Estoy seguro de que hay muchos más puntos que podrían hacerse también.querySelectorAll
, y necesita que todo funcione en navegadores antiguos, entonces jQuery es una opción obvia. No digo que debas usarlo así .Respuestas:
document.querySelectorAll()
tiene varias inconsistencias en los navegadores y no es compatible con los navegadores más antiguos.Esto probablemente ya no cause ningún problema hoy en día . Tiene un mecanismo de alcance muy poco intuitivo y algunas otras características no tan agradables . Además, con javascript le resulta más difícil trabajar con los conjuntos de resultados de estas consultas, que en muchos casos es posible que desee hacer. jQuery proporciona funciones para trabajar en ellos como:filter()
,find()
,children()
,parent()
,map()
,not()
y varios más. Sin mencionar la capacidad de jQuery para trabajar con selectores de pseudo-clase.Sin embargo, no consideraría estas cosas como las características más fuertes de jQuery, sino otras cosas como "trabajar" en el dom (eventos, estilo, animación y manipulación) de una manera compatible con crossbrowser o la interfaz ajax.
Si solo desea el motor selector de jQuery, puede usar el que está usando jQuery: Sizzle De esa manera tiene el poder del motor jQuerys Selector sin la desagradable sobrecarga.
EDITAR: Solo para el registro, soy un gran fan de JavaScript de vainilla. Sin embargo, es un hecho que a veces necesitas 10 líneas de JavaScript donde escribirías 1 línea jQuery.
Por supuesto, debes ser disciplinado para no escribir jQuery así:
Esto es extremadamente difícil de leer, mientras que este último es bastante claro:
El JavaScript equivalente sería mucho más complejo ilustrado por el pseudocódigo anterior:
1) Encuentra el elemento, considera tomar todo el elemento o solo el primero.
2) Itere sobre la matriz de nodos secundarios a través de algunos bucles (posiblemente anidados o recursivos) y verifique la clase (¡la lista de clases no está disponible en todos los navegadores!)
3) aplica el estilo CSS
Este código tendría al menos el doble de líneas de código que escribe con jQuery. También debería tener en cuenta los problemas entre navegadores que comprometerán la gran ventaja de velocidad (además de la confiabilidad) del código nativo.
fuente
querySelectorAll
tiene entre los navegadores? ¿Y cómo usar jQuery resolvería esto, ya que jQuery usaquerySelectorAll
cuando está disponible?Si está optimizando su página para IE8 o más reciente, realmente debería considerar si necesita jquery o no. Los navegadores modernos tienen muchos recursos nativos que proporciona jquery.
Si le importa el rendimiento, puede obtener increíbles beneficios de rendimiento (2-10 más rápido) utilizando JavaScript nativo: http://jsperf.com/jquery-vs-native-selector-and-element-style/2
Transformé un div-tagcloud de jquery a javascript nativo (compatible con IE8 +), los resultados son impresionantes. 4 veces más rápido con solo un poco de sobrecarga.
Es posible que no necesite Jquery proporciona una visión general realmente agradable, que los métodos nativos reemplazan por la versión del navegador.
http://youmightnotneedjquery.com/
Apéndice: más comparaciones de velocidad de cómo los métodos nativos compiten con jquery
Array: $ .inArray vs Array.indexOf: Jquery 24% más lento
DOM: $ .empty vs Node.innerHtml: Jquery 97% más lento
DOM: $ .on vs Node.addEventListener: Jquery 90% más lento
DOM: $ .find vs Node.queryselectorall: Jquery 90% más lento
Array: $ .grep vs Array.filter: nativo 70% más lento
DOM: $ .show / hide vs display none: Jquery 85% más lento
AJAX: $ .ajax vs XMLHttpRequest: Jquery 89% más lento
Altura: $ .outerHeight vs offsetHeight: Jquery 87% más lento
Attr: $ .attr vs setAttribute: Jquery 86% más lento
fuente
$(el).find(selector)
no es igualel.querySelectorAll(selector)
y el rendimiento de los métodos nativos a menudo es bastante horrible: stackoverflow.com/q/14647470/1047823Para entender por qué jQuery es tan popular, ¡es importante entender de dónde venimos!
Hace aproximadamente una década, los principales navegadores eran IE6, Netscape 8 y Firefox 1.5. En aquellos días, había pequeñas formas de navegador cruzado para seleccionar un elemento del DOM además
Document.getElementById()
.Entonces, cuando jQuery fue lanzado en 2006 , fue bastante revolucionario. En aquel entonces, jQuery estableció el estándar sobre cómo seleccionar / cambiar fácilmente elementos HTML y desencadenar eventos, porque su flexibilidad y compatibilidad con el navegador no tenían precedentes.
Ahora, más de una década después, muchas características que hicieron que jQuery fuera tan popular se han incluido en el estándar javaScript:
$()
, ahora puede usarDocument.querySelectorAll()
$el.on()
, ahora puede usarEventTarget.addEventListener()
$el.toggleClass()
, ahora puede usarElement.classList.toggle()
En general, estos no estaban disponibles en 2005. El hecho de que lo estén hoy obviamente plantea la pregunta de por qué deberíamos usar jQuery. Y, de hecho, la gente se pregunta cada vez más si deberíamos usar jQuery .
Entonces, si crees que entiendes JavaScript lo suficientemente bien como para prescindir de jQuery, ¡hazlo! ¡No te sientas obligado a usar jQuery, solo porque muchos otros lo están haciendo!
fuente
Eso es porque jQuery puede hacer mucho más que
querySelectorAll
.En primer lugar, jQuery (y Sizzle, en particular), funciona para navegadores más antiguos como IE7-8 que no admiten selectores CSS2.1-3.
Además, Sizzle (que es el motor de selección detrás de jQuery) le ofrece muchos instrumentos de selección más avanzados, como la
:selected
pseudoclase, un:not()
selector avanzado , una sintaxis más compleja,$("> .children")
etc.Y lo hace en todos los navegadores, sin problemas, ofreciendo todo lo que jQuery puede ofrecer (complementos y API).
Sí, si cree que puede confiar en simples selectores de clase e identificación, jQuery es demasiado para usted y estaría pagando una recompensa exagerada. Pero si no lo hace y desea aprovechar todas las bondades de jQuery, úsela.
fuente
El motor selector de jQuery Sizzle se puede usar
querySelectorAll
si está disponible. También suaviza las inconsistencias entre los navegadores para lograr resultados uniformes. Si no desea usar todo jQuery, puede usar Sizzle por separado. Esta es una rueda fundamental para inventar.Aquí hay algunas selecciones de cerezas de la fuente que muestran el tipo de cosas que jQuery (con Sizzle) resuelve para usted:
Modo de peculiaridades de Safari:
Si ese guardia falla, usa una versión de Sizzle que no está mejorada
querySelectorAll
. Más abajo hay identificadores específicos para inconsistencias en IE, Opera y el navegador Blackberry.Y si todo lo demás falla, devolverá el resultado de
oldSizzle(query, context, extra, seed)
.fuente
En términos de mantenimiento del código, hay varias razones para seguir con una biblioteca ampliamente utilizada.
Uno de los principales es que están bien documentados y tienen comunidades como ... digamos ... stackexchange, donde se puede encontrar ayuda con las bibliotecas. Con una biblioteca codificada personalizada, tiene el código fuente, y tal vez un documento de instrucciones, a menos que el (los) codificador (es) pasen más tiempo documentando el código que escribiéndolo, lo cual es muy raro.
Escribir su propia biblioteca podría funcionar para usted , pero al pasante que se sienta en el escritorio de al lado puede ser más fácil ponerse al día con algo como jQuery.
Llámalo efecto de red si quieres. Esto no quiere decir que el código será superior en jQuery; solo que la naturaleza concisa del código hace que sea más fácil comprender la estructura general para los programadores de todos los niveles de habilidad, aunque solo sea porque hay más código funcional visible a la vez en el archivo que está viendo. En este sentido, 5 líneas de código son mejores que 10.
En resumen, veo los principales beneficios de jQuery como código conciso y ubicuidad.
fuente
Aquí hay una comparación si quiero aplicar el mismo atributo, por ejemplo, ocultar todos los elementos de la clase "my-class". Esta es una razón para usar jQuery.
jQuery:
JavaScript:
Con jQuery ya tan popular, deberían haber hecho que document.querySelector () se comportara como $ (). En su lugar, document.querySelector () solo selecciona el primer elemento coincidente, lo que lo hace útil hasta la mitad.
fuente
document.querySelectorAll('.my-class').forEach(el => el.style.display = 'none');
. Aún así, aunque sea más corto, el rendimiento en términos nativos siempre es mejor.como dice el sitio oficial: "jQuery: The Write Less, Do More, JavaScript Library"
intente traducir el siguiente código jQuery sin ninguna biblioteca
fuente
addClass()
yshow()
realmente no cuentan. Y en cuanto a$('p.neat')
, puedes echar un vistazo a querySelector / All.document.querySelectorAll('p.neat').forEach(p=>p.classList.add('ohmy'));
y deja que CSS haga el resto. Código un poco más largo, pero mucho más eficiente. Por supuesto, su solución no estaba tan disponible en los días de Legacy IE. La parte de "Hacer más" es irónica. jQuery toma alrededor de cien líneas de código para encontrar algo, por lo que hacer más no siempre es productivo.Creo que la verdadera respuesta es que jQuery se desarrolló mucho antes de
querySelector/querySelectorAll
estar disponible en todos los principales navegadores.El lanzamiento inicial de jQuery fue en 2006 . De hecho, incluso jQuery no fue el primero en implementar los selectores CSS .
IE fue el último navegador en implementar
querySelector/querySelectorAll
. Su octava versión fue lanzada en 2009 .Ahora, los selectores de elementos DOM ya no son el punto más fuerte de jQuery. Sin embargo, todavía tiene muchos beneficios bajo la manga, como accesos directos para cambiar el contenido css y html del elemento, animaciones, eventos vinculantes, ajax.
fuente
Antigua pregunta, pero media década después, vale la pena volver a visitarla. Aquí solo estoy discutiendo el aspecto del selector de jQuery.
document.querySelector[All]
es compatible con todos los navegadores actuales, hasta IE8, por lo que la compatibilidad ya no es un problema. Tampoco he encontrado problemas de rendimiento para hablar (se suponía que era más lento quedocument.getElementById
, pero mis propias pruebas sugieren que es un poco más rápido).Por lo tanto, cuando se trata de manipular un elemento directamente, es preferible a jQuery.
Por ejemplo:
es muy superior a:
Para hacer cualquier cosa, jQuery tiene que ejecutar un centenar de líneas de código (una vez tracé un código como el anterior para ver qué estaba haciendo realmente jQuery con él). Esto es claramente una pérdida de tiempo para todos.
El otro costo significativo de jQuery es el hecho de que envuelve todo dentro de un nuevo objeto jQuery. Esta sobrecarga es particularmente derrochadora si necesita desenvolver el objeto nuevamente o usar uno de los métodos del objeto para tratar las propiedades que ya están expuestas en el elemento original.
Sin embargo, donde jQuery tiene una ventaja es en cómo maneja las colecciones. Si el requisito es establecer propiedades de múltiples elementos, jQuery tiene un
each
método incorporado que permite algo como esto:Hacerlo con Vanilla JavaScript requeriría algo como esto:
que algunos encuentran desalentador.
Los selectores de jQuery también son ligeramente diferentes, pero los navegadores modernos (excluyendo IE8) no obtendrán muchos beneficios.
Como regla, advierto contra el uso de jQuery para nuevos proyectos:
Si nada de lo anterior importa, entonces haz lo que quieras. Sin embargo, jQuery ya no es tan importante para el desarrollo multiplataforma como solía serlo, ya que JavaScript y CSS modernos van mucho más allá de lo que solían ser.
Esto no menciona otras características de jQuery. Sin embargo, creo que ellos también necesitan una mirada más cercana.
fuente
El acuerdo es con la función $ (), crea una matriz y luego la divide por usted, pero con document.querySelectorAll () crea una matriz y debe dividirla.
fuente
Solo un comentario sobre esto, cuando se usa material design lite, jquery selector no devuelve la propiedad para el diseño de material por alguna razón.
Por:
Esto funciona:
Esto no lo hace:
fuente