2010-01-14 16 views
8

He estado construyendo un sitio de Ruby on Rails en los últimos meses y solo he usado una pequeña cantidad de funciones integradas de JavaScript. Sin embargo, haré mucho más desarrollo de JavaScript en las próximas semanas y meses, y estoy debatiendo sobre qué marco de JavaScript ir.¿Cuáles son las diferencias actuales entre jQuery y Prototype?

Por un lado, jQuery parece ser el más popular, pero Prototype ya está integrado en Rails. También he leído un montón de artículos en línea de hace unos años sobre cómo jQuery es más conciso en algunas cosas pero descuidado en otras, y da varias otras opiniones.

Así que mis preguntas son a las personas que han utilizado tanto (preferiblemente recientemente):

  • ¿Cuál es la diferencia en el uso de cualquiera de Prototype y jQuery desde un puro JavaScript y desde una perspectiva de Ruby on Rails?
  • ¿Hay una diferencia significativa entre ellos o están ahora bastante cerca el uno del otro en términos de funcionalidad y escritura de código?
  • ¿Qué tan alto es el costo de cambio en términos de cosas que tienen que ser aprendidas y el código que debe ser reescrito?

Gracias

Respuesta

13

discusión anterior

Gran parte, si no todos de su pregunta ya ha sido discutido. Ver el search o:

El cambio de prototipo a jQuery

Estoy en el proceso de cambiar de Protoype a JQuery, principalmente por razones de rendimiento (he visto demasiados puntos de referencia con Prototype siempre llegando por último a JQuery, MooTools y Dojo.) Yo diría que cambiar el costo no es horrible, porque la mayoría de los conceptos básicos (Selección, Efectos, Ajax) son muy similares. Sin embargo, cada línea de código Prototype debe ser cuidadosamente reescrita, especialmente porque muchas funciones auxiliares y construcciones ($$$) se ven engañosamente similares.

Si su código contiene muchas construcciones encadenadas complejas que también pueden estar disponibles en Jquery, pero funcionan de manera diferente, la migración puede convertirse en una tarea muy engorrosa. Si lo usa solo para la selección rápida de elementos $(), efectos y un poco de Ajax, no tanto.

De cualquier manera, prepárate para una fase de aprendizaje intenso. Los constructos de JQuery son pequeños e inteligentes, pero es terrible leer en mi humilde opinión (y se ven horribles en comparación con un bloque de Javascript nativo, pero esa es una discusión diferente). Definitivamente lleva tiempo familiarizarse con la sintaxis y los principios si proviene de un marco diferente o Javascript nativo.

+0

+1 gran respuesta Pekka! –

3

Hay una gran diferencia en la forma en que trabajas con jQuery en comparación con el prototipo, una vez que te acostumbras a los matices de los marcos, es muy fácil cambiar de uno a otro.

El mayor obstáculo al principio es el hecho de que Prototype se engancha en el dom inmediatamente. Tan pronto como lo incluyas en la página, todos los elementos dom que mires tendrán la funcionalidad del prototipo adjunta. Con jQuery deja todos los elementos hasta que accedas a uno con el selector jQuery $ ('css-class'). El objeto que reciba de esa llamada tendrá los métodos jQuery adjuntos.

Si quieres entrar en jQuery puedes dejar todo usando prototipos e incluir jQuery y llamar al jQuery.noConflict();http://docs.jquery.com/Core/jQuery.noConflict. Esto devolverá el método '$' al prototipo y le permitirá usar jQuery llamando a jQuery ('css-class') en su lugar.

Si quieres entrar completamente en jQuery, recomendaría usar el plugin jRails (http://github.com/aaronchi/jrails). Reemplazará todos los rails ajax helpers y hará que usen jQuery en lugar de prototipo. He hecho esto en una serie de proyectos y nunca he tenido ningún problema.

Al final solo debe echar un vistazo a prototype y jQuery y ver cuál se ajusta a su estilo de codificación. Puedes lograr las mismas cosas con ambos frameworks, es solo una sintaxis ligeramente diferente y una forma de pensar para cada uno.

2

jQuery es más eficiente para efectos de cliente pequeños e inteligentes. prototypejs es más eficiente para el desarrollo profundo de JavaScript.

jQuery tiene una gran cantidad de complementos para efectos de IU sólidos. prototypejs tiene una biblioteca completa para Enumerables, Functions, Hashes.

+0

¿Qué te hace decir que el prototipo es más eficiente para el desarrollo de JavaScript profundo? La biblioteca en sí es más eficiente? Usted como desarrollador es más eficiente? –

+0

Casi todo en jQuery está relacionado con el DOM. Pero prototypejs ofrece muchos métodos de función increíblemente útiles (curry, wrap ...: http://api.prototypejs.org/language/function.html) y un objeto Enumerable con una maravillosa API (invoke, pluck ...: http : //api.prototypejs.org/language/enumerable.html) – Alsciende

+0

Entonces, lo que quiero decir con "es más eficiente para" es "ofrece características avanzadas para" y por lo tanto "nos hace más eficientes para". – Alsciende

9

La respuesta de Pekka es genial, pero una cosa que se debe agregar es que Rails se está moviendo pesadamente en la dirección de ser agnóstico de framework de Javascript. Aunque cuando salió Rails por primera vez, su integración con AJAX fue innovadora, el panorama de Javascript ha cambiado drásticamente desde entonces, y la integración de Rails ya no está a la altura de las mejores prácticas. Como tal, la integración de Prototype no se debe considerar hoy como un factor importante en Rails 2.3, y será aún menos factor en Rails 3.0, que probablemente se lanzará en los próximos meses. Recientemente leí an interesting article y describí algunos de los cambios más significativos en la integración de JavaScript de Rails en años.

Mi proyecto actual tiene miles de líneas de código Prototype heredado, pero recientemente comenzamos a usar jQuery porque sus beneficios eran demasiado grandes como para dejarlos pasar. Mis impresiones:

El prototipo es un marco maduro que hace un muy buen trabajo apuntalando las diferencias del navegador y brindando una funcionalidad muy completa. Desafortunadamente es un poco torpe con sus cambios en el entorno predeterminado de Javascript, y no está viendo un desarrollo rápido y no tiene un ecosistema de complementos significativo.

jQuery es un marco más reciente que fue capaz de aprovechar algunas de las lecciones de la década de los marcos de Javascript como prototipo para crear algo más modular, menos molesto, y significativamente más potente y concisa. Todavía me encanta Prototype, pero el ecosistema de plugin y manipulación DOM de jQuery es demasiado bueno para ignorarlo. Si estuviera comenzando un proyecto nuevo, tendría que ir con jQuery porque parece que es allí donde está ocurriendo la innovación (al menos entre esas dos opciones).

Cuestiones relacionadas