Lorsque j'ai pris la décision de passer de Prototype à jQuery, j'ai eu à traverser une période d'adaptation au niveau de l'apprentissage. Mais le plus gros défi était de faire une transition en douceur dans les projets, le temps de traduire des librairies constuites initialement sur l'architecture de Prototype.
À certains moments, faute d'avoir déniché un plugin équivalent, j'ai dû à accepter le fait que je devrais, pour un certain temps, faire cohabiter les deux frameworks sur certains projets.
En temps normal, j'intégrais Prototype avec scriptaculous, une librairie d'effets visuels, en plus des scripts et classes utilitaires customs développés au cours des dernières années. Avec jQuery, certaines des fonctionnalités sont équivalentes, par exemple la notation $(). Ce qui crée évidemment un conflit car l'engin JavaScript ne sait pas si on fait référence à un ou l'autre des frameworks.
Pour contourner cette incompatibilité. jQuery offre la possibilité de résoudre le namespace en le déléguant à un autre objet. D'abord, les scripts doivent être inclus dans la page web en respectant l'ordre suivant :
<script ... src="/js/prototype.js"></script>Ensuite, au début d'un bloc JavaScript, il faut invoquer la fonction noConflict().
<script ... src="/js/scriptaculous.js"></script>
<script ... src="/js/plugin-maison-pour-prototype.js"></script>
<script ... src="/js/jquery.js"></script>
jQuery.noConflict();On pourra alors remplacer les appels aux fonctions jQuery :
$(document).ready();Encore plus court et simple, on peut assigner l'objet jQuery à une variable, ce qui nous évitera d'écrire jQuery au long devant chaque appel.
// deviendra
jQuery(document).ready();
// les appels comme ceux-ci :Pour un temps, inclure les deux frameworks sera un mal nécessaire en attendant la transition complète. Dans le pire des cas, ça alourdit légèrement le téléchargement initial (bien que les .js soient compressés et gzippés) mais une fois que c'est fait, les librairies reposent dans la cache du fureteur, donc ce n'est rien pour s'affoler.
jQuery('#id');
jQuery.ajax();
jQuery.each();
// seront réduits à
$j = jQuery.noConflict();
$j('#id');
$j.ajax();
$j.each();
Pourquoi as-tu choisis Jquery plutôt que Prototype ? Pourquoi cette soudaine transition ?
Je me souviens avoir lu une comparaison sur leurs performances respectives. jQuery avait aussi une meilleure documentation et de nombreux plugins disponibles.