He estado usando jQuery durante mucho tiempo y he estado escribiendo un plugin de diapositivas para mi trabajo y yo (no del 100% conscientemente) escribí probablemente el 75% en una sola cadena. Está completamente comentado y especifico cada end()
y lo que está reiniciando, etc., pero ¿esto ralentiza jQuery o la carga DOM, o esto realmente lo acelera?¿Son malas las largas cadenas de jQuery?
Respuesta
Depende de su código específico, como siempre. En cuanto a almacenar una referencia vs .end()
, bueno ... con una cadena muy larga, es más rápido no encadenar vs .end()
llamadas, simplemente porque tiene que manejar el equipaje adicional (almacenamiento/restauración), como la referencia .prevObject
, la .selector
, .context
, etc. que probablemente no importa en muchos casos ... y solo más referencias entrelazadas a objetos anteriores.
Donde es más costoso es más difícil de medir ... no es la ejecución (aunque es más lenta, incluso si infinitesimalmente) ... es la recolección de basura más complicada para limpiar todos esos objetos más tarde, ya que el gráfico de dependencia ahora es mucho más grande.
Ahora ... ¿hará una diferencia de mensurable diferencia? no a menos que su cadena sea realmente larga, en cuyo caso es probablemente una micro-optimización de la que no necesita preocuparse en la mayoría de los casos.
99% de las veces, a menos que usted está haciendo que algunos llaman penalizar el rendimiento atroz, no se preocupe por lo, al igual que con la mayoría de los micro-optimizaciones. Si estás teniendo un problema con el rendimiento, entiéndelo.
+1, para los buenos consejos sobre el uso de '.end()' –
+1 Para el punto con respecto al tamaño del gráfico de dependencia. – Orbling
Gracias! Bueno saber. Hago el almacenamiento en caché, etc., pero para esto no hay muchos selectores y el código simplemente fluía bien encadenado, así que lo hice, entonces pensé ... eh, oh ... esto podría ralentizar las cosas. –
Mi supongo que sería la diferencia, o más rápido, debido a la falta de intermediarios.
El único inconveniente importante es la claridad, si piensas mediante comentarios que es obvio sin hacerlo multilínea con variables intermedias, en virtud de los comentarios o simplemente una cadena de llamada bien limpia, entonces está bien.
Una de las cosas más caras que puede hacer en un navegador moderno es acceder y manipular el DOM. El encadenamiento le permite minimizar las búsquedas reales que tiene que hacer, lo que puede significar un código significativamente más rápido. La otra opción es hacer la búsqueda inicial, almacenar eso en una variable y hacer todo lo que esté fuera de esa variable. Dicho esto, jquery fue diseñado específicamente con esa api de encadenamiento en mente, por lo que es más idiomático encadenar.
Creo que la capacidad de recuperación de jQuery es una gran característica ... uno realmente debería usarla más a menudo. por ejemplo:
$(this)
.find('.funky')
.css('width', 30)
.attr('title', 'Funky Title')
.end()
.fadeIn();
es mucho mejor (y elegante) - no tienen que crear 2 jQuery $(this)
objetos que:
$(this).find('.funky').css('width', 30).attr('title', 'Funky Title');
$(this).fadeIn();
No es necesario crear dos jQuery '$ (this)' ... 'var obj = $ (this) .find ('. Funky'). Css ('width', 30) .attr ('title' , 'Funky Title'); Obj.fadeIn(); ' – Matt
por supuesto, si lo almacena en una variable, pero eso no es lo que la mayoría de los usuarios de jQuery tienden a escribir en mi experiencia, simplemente" abusan "de $(). es por eso que encontré la chainable elegante - uno puede mantenerse barato en variables :). Además tu código es smt diferente al mío ... (desvaneciendo '$ (this) .find ('. funky')' en lugar de '$ (this)') – kares
@Matt - eso no tendrá el mismo efecto , su variable 'obj' se refiere a algunos elementos' .find', no 'this' :) –
- 1. ¿Las aserciones siempre son malas?
- 2. Las declaraciones de interruptor son malas?
- 3. NServiceBus: ¿Las transacciones MSMQ no son MALAS?
- 4. ¿Las pruebas basadas en datos son malas?
- 5. ¿Las declaraciones condicionales en las vistas son malas noticias?
- 6. Depurador XCode: mostrar cadenas largas
- 7. ¿Por qué son malas las consultas de posición?
- 8. ¿Son malas las aplicaciones con muchos archivos DLL?
- 9. Comparando cadenas largas por sus valores hash
- 10. ¿Las declaraciones preparadas dinámicas son malas? (con php + mysqli)
- 11. ¿Las barras innecesarias en una URL son malas?
- 12. ¿por qué son malas las asignaciones en condiciones?
- 13. ¿Por qué las variables no utilizadas son malas?
- 14. Almacenamiento de cadenas largas binarias (datos brutos)
- 15. ¿Las cadenas StringBuilder son inmutables?
- 16. Problema de cadenas largas persistentes con Hibernate
- 17. ¿Las cadenas de Delphi son inmutables?
- 18. Cómo cifrar cadenas largas en PHP?
- 19. Resaltar oraciones largas usando jQuery
- 20. ¿Son malas las miradas negativas de Regex y las negativas (JavaScript)?
- 21. Pasar cadenas largas (como argumento) a una aplicación de consola
- 22. ¿Qué son realmente las cadenas en .NET?
- 23. ¿Las cadenas en Ruby son mutables?
- 24. ¿Miles de 301 redirecciones son malas para SEO?
- 25. ¿Cómo puedo truncar mis cadenas con un "..." si son demasiado largas?
- 26. Trabajar con cadenas largas (heredocs) en Java: ¿el enfoque legible?
- 27. ¿Es bueno almacenar cadenas largas en una base de datos?
- 28. ¿Cuáles son las formas buenas y malas de documentar un proyecto de software?
- 29. Citas de estilo Perl para cadenas largas en C++
- 30. jQuery y largas identificadores de int
etiquetados este '[rendimiento]' así, ya que es el principal preocupación parece :) –