2011-04-01 8 views
12

Se trata más de una cuestión de estilo y preferencia que cualquier otra cosa, aunque es posible que también haya consideraciones de rendimiento.Si ya está usando un framework, ¿nunca debería escribir js "plain vanilla"?

Si está utilizando un marco (digamos jQuery por razones de argumentos, aunque podría ser cualquier marco) y necesita escribir una nueva función. Es una función simple, y puedes lograrla fácilmente sin usar el marco.

¿Hay alguna ventaja de usar el marco de todos modos, porque ya está cargado en la memoria del navegador, tiene un mapa de DOM fácilmente accesible, etc.? ¿O js simple vainilla siempre analizará más rápido porque está "en bruto" y no depende del marco?

¿O simplemente es una cuestión de gusto?

Respuesta

1

Según mi comprensión de jQuery, en realidad no mantiene un mapa de la dom en la memoria y solo tiene métodos de navegación cruzada para recorrer la dom. En algunos navegadores, los navegadores serán más rápidos que otros (como un selector basado en clases en Firefox será más rápido que en IE porque IE no tiene una función incorporada para getElementsByClassName y Firefox sí). Si no necesita los métodos de frameworks para hacer las cosas, le diría que siga adelante y use el JS nativo ya que generalmente es lo que el framework elegido usará.

7

La respuesta dependerá en gran medida de lo que esté trabajando para lograr. En general, se le garantiza al menos una penalización de rendimiento menor por la sobrecarga de funciones si usa un marco para lograr algo que se puede lograr usando JavaScript "vano". Esta penalización de rendimiento es típicamente nominal y puede descartarse si se tienen en cuenta otras ventajas de su marco (velocidad de desarrollo, código más limpio, facilidad de mantenimiento, código reutilizable, etc.).

Si tiene que tener el código más eficiente posible, intente escribir JavaScript puro que esté altamente optimizado. Si, como en la mayoría de los escenarios del mundo real, no le preocupan unos pocos milisegundos en la diferencia de rendimiento, siga con su Marco para mantener la coherencia.

+0

Es cierto. La mayoría de las cosas más pesadas con javascript implica jugar con el DOM. He estado evaluando los selectores jQuery en los últimos días e incluso los complicados selectores tardan microsegundos. Es MUCHO más importante optimizar su código de manera estándar, p. reutilizando variables, no colocando selectores dentro de los bucles, etc., como lo harías con JS vainilla. El golpe de rendimiento real del marco es insignificante. – bcoughlan

0

He estado trabajando en un proyecto pesado de javascript. He encontrado que casi cada vez que tenía un fallo multi-navegador en mi código, que estaba en un lugar donde tuve código como este:

var element = $(selector); 
// lots of code ... 
element[0].someVanillaOperation(); 

y vainilla que no era exactamente la misma en todos los navegadores . Lo que me encanta de jQuery es que (la mayoría de las veces) oculta las diferencias del navegador y sus funciones funcionan igual para todos.

+0

Tenga en cuenta que solo me refiero a errores puros de JavaScript aquí; Los problemas de procesamiento de HTML/CSS no están dentro del alcance. – configurator

1

Yo diría que hacerlo con el marco, simplemente porque traerá consistencia dentro del proyecto. Si está utilizando el marco en cualquier lugar, incluso en pequeñas funciones, será más fácil de mantener.

En cuanto al otro factor, realmente depende de lo que estás tratando de hacer.

0

Si está seleccionando elementos por ID, entonces JavaScript es más rápido. Sin embargo, no proporciona ninguna de las sutilezas de selección que se obtienen con jQuery, seleccionando múltiples elementos por clase en una sola llamada, por ejemplo.

Eche un vistazo a este enlace: http://www.webkit.org/perf/slickspeed/ que ejecuta una prueba de velocidad. Es una versión anterior de jQuery, pero los resultados en términos de velocidad bruta hablan por sí mismos.

Personalmente, tiendo a usar jQuery para todo: mantiene el código más limpio y el hecho de que prácticamente prescinde de los problemas de soporte JS entre navegadores vale la pena en cualquier rendimiento de mi libro.

+0

Irónicamente, las pruebas en ese enlace fallan con un error de javascript cuando lo probé (Chrome). –

+0

@jamietre: ¡lol! De Verdad? Estoy en la compilación 10.0.648.204 y están bien para mí. Básicamente dicen que todas esas pruebas se realizan más rápido de forma nativa. – Town

+0

Trabajó en firefox. Algún tipo de problema de marco. 'frameworks [iframe.name] = {'test': window.frames [iframe.name] .test, ...' .. "UnEught TypeError: No se puede leer la propiedad 'test' undefined". Obviamente, no deberían haber usado JS nativo para configurar las pruebas. :) –

3

Siempre hay algo que aprender cuando se resuelven problemas con JS puro en lugar de tener un código externo que lo haga por usted. A la larga, es más fácil de mantener porque es su código. No va a cambiar Ya sabes lo que hace. Ahí es donde realmente entra en juego el valor de resolver tus propios problemas. Si realiza su investigación en MDC, MSDN y ECMAScript spec, las secuencias de comandos entre navegadores se vuelven mucho más fáciles de procesar. Claro, Microsoft tiene sus propias ideas y su propio DOM, pero ahí es donde está la diversión (leer: desafío).

Las secuencias de comandos de navegador cruzado en JS puro realmente aumentan su habilidad para resolver problemas junto con su comprensión del idioma. Si todavía hay cosas que te confunden, entonces jQuery puede entrar en la mezcla y salvar la brecha mental, por así decirlo. Es genial conducir en un vehículo de lujo, pero ¿de qué sirve si no sabes cómo cambiar un neumático cuando se desinfle? Los mejores desarrolladores de jQuery son los que conocen bien el JavaScript y saben cuándo usar jQuery y cuándo usar el JS simple.

A veces, solo tienes que arremangarte y hacer un trabajo arduo. No hay un complemento jQuery para todo, y jQuery no puede ocultarle todas las peculiaridades que varios navegadores tienen para ofrecer. Hacer el trabajo con tu propio código es muy gratificante, incluso si tienes que esforzarte para que funcione.

Es perfectamente aceptable utilizar muchas herramientas diferentes para completar una tarea singular. Solo necesita saber cuándo y dónde usarlos.

Cuestiones relacionadas