Bonjour,
pour avoir développé un projet en Prototype à une époque ou jQuery n'était pas aussi abouti, et devant apporter des évolutions assez conséquentes aujourd'hui, je me suis penché sur le cas jQuery justement.
jQuery vs prototype, quel débat !
Mais de mon point de vue, tout deux ont leurs points fort / faible, en fait le framework à utiliser dépend vraiment de ce qui va tourner derrière.
Pour le projet que j'ai réalisé en Prototype, on va dire que c'est un "simcity-like", à savoir pouvoir créer des "bâtiments", les glisser/déposer pour pouvoir reproduire le quartier, la ville. Sauvegarder le tout en base. Ensuite pouvoir, pour chaque bâtiment en question, déposer des éléments à l'intérieur (définir les pièces mais en très grosse maille) et là aussi en glisser/déposer.
A l'époque, c'était Prototype & Scriptaculous, jQuery était en bêta et la partie UI inexistante, le choix était vite fait, sachant que Prototype dispose quand même de pas mal de fonctionnalités.
Je me suis récemment replongé dans le code et je dois bien avouer que je ne sais pas comment on a pu développer des choses pareilles à l'époque, l'écriture Prototype me paraît un peu fouillis, non lisible et non "naturelle".
J'ai mis pas mal de temps à retomber sur mes pieds.
Le seul vrai avantage que je vois à Prototype aujourd'hui, c'est la notion de classe et pouvoir faire du pseudo objet, ce qui n'est pas présent en tant que tel dans jQuery.
Je trouve que depuis le temps, l'API n'a pas beaucoup évoluée, la communauté s'est un peu essouflée.
Passons sur jQuery.
Je ne connaissais pas se framework mais j'en avais beaucoup entendu parlé, je me suis donc mis à tester sur une page type. J'ai bizarrement mis beaucoup (mais alors beaucoup) moins de temps à comprendre et appréhender les subtilités de jQuery qu'avec Prototype à l'époque. jQuery propose une API de base juste phénoménale.
J'ai refais une page à l'équivalent jQuery, le code est :
- Beaucoup plus lisible
- Beaucoup plus évolutif / maintenable
- Beaucoup plus concis ! (Prototype : ~800 lignes de code / jQuery : ~300 lignes de code) Sans pour autant être moins compréhensible, au contraire même !
Au niveau des performances, l'appli en question est très gourmande en ressource, au point que lors du chargement, elle met ~1m sur IE6 (contre 2 secondes sur FF/Chrome
), le passage de Prototype a jQuery n'a quasi rien changé de ce côté là, mais j'ai vu que dans la dernière release jQuery, des évolutions énormes ont été apportées côté perfs, donc à voir.
Choses que j'apprécie également énormément dans jQuery c'est le système de cache global / à l'élément qui est disponible (via $.data()), c'est juste surpuissant et ça manque à Prototype.
A noter que le manque de classe côté jQuery peut être compensé par la création de widgets, qui utilisé à bon escient est juste une pure merveille, une pure tuerie, je vais en faire un article d'ailleurs.
Bref, tout le côté plugin de jQuery est bien, même si j'en utilise aucun (jQuery se suffit à lui-même, soyons honnête) et au besoin, il est très facile de développer les siens (genre l'API de prototype?
), ainsi que de développer ses propres sélecteurs !
Un exemple tout bête, l'appli que je développe, les divs sur lesquelles je fais un .building() (pour dire que c'est des bâtiments), je peux directement les retrouver avec le sélecteur $(":building"), pas besoin de rajouter de classes particulières, il gère automatiquement les sélecteurs, et tout un tas d'opérations de base. Je veux rechercher un bâtiment par son nom (une métadonnée), là non plus, je peux écrire mon propre sélecteur, du genre :
1 2 3 4 5 6 7 8 9
| jQuery.expr[':']["building-name"] = function(ui, index, name) {
try
{
return $.data(ui, "building").options.name == name[3]
} catch(e)
{
return false;
}
}; |
Pour ensuite, n'avoir plus qu'a faire :
$(":building-name('BATIMENT1')")
pour sélectionner un élément du DOM par son nom.
Eh oui, ça fait beaucoup de jQuery tout ça, tout n'est pas beau et rose non plus avec jQuery mais je dois bien avouer que si c'était à refaire je ne prendrai plus Prototype...
Cependant, je reste tout à fait d'accord avec les pour et contre que tu as cité (excepté pour la surcharge des opérateurs
)
Je suis prêt à toute discussion ou apport de compléments d'infos pour étayer (/ détruire
) ce que j'ai dis
Partager