Quelles sont les différences actuelles entre jQuery et Prototype?

Je construis un site Ruby on Rails ces derniers mois et je n'ai utilisé qu'une petite quantité de fonctions JavaScript intégrées. Cependant, je vais faire beaucoup plus de développement de JavaScript dans les semaines et les mois à venir et je discute sur quel cadre JavaScript.

D'une part, jQuery semble être le plus populaire, mais encore une fois Prototype est déjà intégré dans Rails. J'ai aussi lu beaucoup d'articles en ligne depuis quelques années, en parlant de la façon dont jQuery est plus concis à certaines choses mais négligent les autres et donne diverses autres opinions.

Donc, mes questions s'adressent aux personnes qui ont utilisé les deux (de préférence récemment) :

  • Quelle est la différence dans l'utilisation de Prototype et jQuery à partir d'un JavaScript pur et d'une perspective Ruby on Rails?
  • Existe-t-il une différence significative entre eux ou sont-ils maintenant très proches l'un de l'autre en termes de fonctionnalité et d'écriture de code?
  • Quelle est la hauteur du coût de la commutation en termes de problèmes à réapprendre et de code qui doit être réécrit?

Merci

Discussion précédente

Beaucoup, sinon toute votre question a déjà été discutée. Voir la recherche ou:

  • Comment allez-vous pour changer de site de Prototype à jQuery
  • Prototype, dojo ou jQuery?
  • Pourquoi tout le monde aime-t-il jQuery plus que prototype / script.aclo.us ou mootools ou quoi que ce soit?
  • Est-il vrai que Jquery + Rails est problématique?
  • Utilisation de jquery dans Rails

Passe de Prototype à JQuery

Je suis en train de passer de Protoype à JQuery, principalement pour des raisons de performance (j'ai vu trop de points de repère avec Prototype qui arrivent toujours à JQuery, MooTools et Dojo). Je dirais que le coût de commutation n'est pas horrible, car la plupart Les concepts de base (Sélection, Effets, Ajax) sont très similaires. Cependant, chaque ligne de code Prototype doit être soigneusement réécrite – soigneusement parce que de nombreuses fonctions et constructions d'aide ( $ $$ ) semblent énormément similaires.

Si votre code contient de nombreuses constructions chaînées complexes qui peuvent être disponibles aussi dans Jquery, mais fonctionnent différemment, la migration peut devenir une tâche très lourde. Si vous l'utilisez uniquement pour la sélection d'éléments $ () rapide, les effets et un peu d'Ajax, pas tellement.

Quoi qu'il en soit, préparez-vous à une phase d'apprentissage intense. Les constructions de JQuery sont petites et intelligentes, mais elles sont terribles pour lire IMHO (et ont l'air horrible par rapport à un bloc de Javascript natif, mais c'est une discussion différente). Il faut certainement du temps pour se familiariser avec la syntaxe et les principes si vous venez d'un cadre différent ou un Javascript natif.

La réponse de Pekka est géniale, mais une chose qui devrait être ajoutée est que Rails évolue fortement dans le sens de l'agnostique de framework de Javascript. Bien que lorsque Rails soit sorti pour la première fois, son intégration AJAX a été innovante, le paysage Javascript a radicalement changé depuis lors, et l'intégration Rails ne correspond plus aux meilleures pratiques. En tant que tel, l'intégration Prototype ne devrait pas être considérée comme un facteur majeur aujourd'hui sur Rails 2.3, et ce sera encore moins un facteur dans Rails 3.0 qui sera probablement publié dans les prochains mois. J'ai récemment lu un article intéressant décrivant certains des changements les plus importants de l'intégration Javascript de Rails depuis des années.

Mon projet actuel comporte des milliers de lignes de code Prototype hérité, mais nous avons récemment commencé à utiliser jQuery car ses avantages étaient trop géniaux pour laisser passer. Mes impressions:

Prototype est un cadre mature qui fait un très bon travail qui permet d'optimiser les différences de navigateur et de fournir des fonctionnalités très complètes. Malheureusement, il est un peu lourd avec ses changements dans l'environnement Javascript par défaut, et il ne voit pas un développement rapide et n'a pas d'écosystème plugin significatif.

JQuery est un cadre plus récent qui a pu tirer parti des leçons des cadres javascript antérieurs comme Prototype pour créer quelque chose de plus modulaire, moins intrusif et significativement plus puissant et plus concis. J'aime encore Prototype, mais la manipulation DOM de jQuery et l'écosystème de plugin sont tout simplement trop bons à ignorer. Si j'étais en train de lancer un projet Greenfield, je devais aller avec jQuery parce que cela semble être l'origine de l'innovation (au moins entre ces deux choix).

Il existe une très grande différence dans la façon dont vous travaillez avec jQuery par rapport au prototype, une fois que vous vous habituez aux nuances des cadres, il devient assez facile de passer d'un de ces deux types.

Le plus grand obstacle au début est le fait que Prototype s'accumule dans le domaine tout de suite. Dès que vous l'incluez dans la page, tous les éléments dom que vous recherchez auront la fonctionnalité de prototype qui leur est attachée. Avec jQuery, il laisse tous les éléments en place jusqu'à ce que vous accédez à un avec le sélecteur jQuery $ ('css-class'). L'objet que vous recevez de cet appel aura les méthodes jQuery attachées.

Si vous souhaitez vous installer dans jQuery, vous pouvez laisser tout en utilisant un prototype et inclure jQuery et appeler jQuery.noConflict(); http://docs.jquery.com/Core/jQuery.noConflict . Cela renverra la méthode '$' au prototype et vous permettra d'utiliser jQuery en appelant jQuery ('css-class') à la place.

Si vous souhaitez passer pleinement dans jQuery, je vous recommande d'utiliser le plugin jRails ( http://github.com/aaronchi/jrails ). Il remplacera tous les ailes de ajax de rail et les utilisera jQuery au lieu de prototype. Je l'ai fait dans un certain nombre de projets et je n'ai jamais eu de problèmes.

En fin de compte, vous devriez jeter un oeil au prototype et jQuery et voir lequel s'adapte à votre style de codage. Vous pouvez accomplir les mêmes choses avec les deux cadres, c'est juste une syntaxe légèrement différente et une façon de penser pour chacun d'eux.

JQuery est plus efficace pour les petits effets des clients intelligents. Prototypejs est plus efficace pour le développement en javascript.

JQuery possède une multitude de plugins pour des effets UI robustes. Prototypejs a une bibliothèque complète pour Enumerables, Functions, Hashes.