• Optimisation>Vanilla vs JQuery -
  • Publié le :  | Modifié le :

JavaScript: vanilla versus JQuery.

Après la lecture de cet article JS performance, je me suis penché sur mon code JavaScript et son optimisation. Mon fichier JQuery même compressé pèse quatre à cinq fois plus que mon document HTML ?!?

Le choix des armes.

C'est quoi JQuery? JQuery est une bibliothèque de scripts en JavaScript qui s'intègre en surcouche par rapport au JavaScript supporté en natif par tous les navigateurs, depuis de nombreuses années. Pour de plus amples connaissances jQuery : l'histoire d'un framework.

JQuery apporte une simplification du code par rapport à du JavaScript pure souche. Il permet de faire des fonctions complexes sans trop connaissances en programmation. C'est la porte d'entrée pour pouvoir avoir du codage propre. J'entends par là qu'il permet d'automatiser des fonctions dynamiques sans toucher au document HTML. Puisqu'avec une #id ou des class vous pouvez allouer des fonctions à la chaine sans devoir mettre à chaque balise HTML un JavaScript:onclick par exemple. Vous pouvez le faire en JavaScript mais c'est nettement moins simple.

Pour vous initier à JQuery c'est ici Grafikart: Initiation à jQuery . Un très bon tutoriel pour débuter.
Sans compter de nombreux tutoriels annexes à garder dans ses favoris.

Faire le pont entre les deux...

Comme l'indique Jérome Debray dans son article, il est utile d'optimiser le code JQuery, et surtout cela pousse à mettre les «mains dans le cambouis».

...Puis un choix

Selon votre niveau en développement et ce dont vous avez besoin. De la performance ou de la facilité d'utilisation. Pour une vue d'ensemble jsperf: test offset jquery vs vanilla. Pour ma part j'ai sauté le pas, pour l'instant je n'utilise que JavaScript. Je n'utilise pas de JavaScript à outrance, c'est un non-sens d'optimiser tout son site et d'avoir un fichier JQuery qui pèse plus lourd que mes documents et je suis loin d'en utiliser toutes les fonctions. De plus je teste mon site sur une tablette quadcore à 1.1 Ghz, la différence se fait sentir du point de vue de la fluidité, entre les deux solutions. Sur un PC par contre c'est moins évident.

Pour pouvoir comparer:

Vanilla, 9Ko -> Compressé 3Ko Standalone|| nb lignes: 243.


JQuery, 95Ko+ 2Ko -> Compressé 33Ko || nb lignes: 10308 + 46.

Les écueils.

Le développement en JavaScript demande un bon niveau par rapport à JQuery. Dans certains domaines notamment avec les animations il faudra faire un bon vieux coller/copier des familles, avec des tâtonnements pour la mise en place. JQuery apporte plus de souplesse dans la gestion des événements en tâche de fond, en JavaScript vous devrez les gérer tous si vous voulez bien faire, sinon vous devrez faire des concessions sur des détails (fadein, fadeout, ....). Cette gestion va vous demandez de bonnes connaissances en JavaScript, pour exemple, trouver les éléments selon la classe, les listeners, etc. Mais c'est possible, avec quelques efforts de recherche.

Gabriele Romanato JavaScript: implementing the fadeIn() and fadeOut() methods without jQuery.


nb: Si vous avez un window.onload il faudra le mettre à l'intérieur de la fonction juste après window.FX = FX; histoire d'éviter les nervous breakdown. :)

Stackoverflow rules.

J'ai une bonne et une mauvaise nouvelle.

La bonne, faire des recherches pour trouver les bonnes sources cela est possible, la mauvaise, il faudra le faire en anglais. C'est le constat que je dresse après de nombreuses recherches infructueuses dans ma langue maternelle. Or dès que j'ai pu formuler mes recherches correctement en anglais, dans l'immense majorité des cas, j'ai trouvé des réponses claires et précises, qui fonctionnent sur tous les navigateurs, what's else? :)
Pour ma part Stackoverflow est une référence en matière de programmation. Voir les exemples suivants:

Stackoverflow: “hasClass” with javascript?

Stackoverflow: Event.target.classname only first class

Stackoverflow: How use click event after xhr load without query?
Essayez de trouver les mêmes réponses en français.

Les références

Web API Interfaces MDN (Mozilla Developer Network).
Web API Interfaces interface de programmation pour les classes, méthodes, fonctions en JavaScript.

Référence du DOM Présentation du DOM, avec les liens sur les interfaces Web API.
Référence à element
Dans le DOM (Document Object Model) l'objet element représente un element HTML. cad une balise, par exemple une <div>
MDN DOM.element en fr, une introduction au DOM/element

MDN Web API Interfaces Element en en, la liste des propriétés et des méthodes
W3schools.com.
JavaScript referenceJavaScript and HTML DOM Reference.
stackoverflow.
dans votre moteur de recherche et en anglais, faites votre requête, si vous avez des réponses venant de stackoverflow n'hésitez pas.
compatibilité css html js avec les browsers pc mobile.
quirksmode : Informations sur la compatibilté des navigateurs sur internet.

En conclusion:

Je me retrouve avec un .js de 1.5ko contre un JQuery compressé de 32ko. Avec un temps d'exécution, sur la machine cliente, nettement moins élevé(en particulier sur ma tablette à deux euros).
J'ai divisé par 20 le poids du fichier et comme je l'inclus dans ma page je ne fais plus qu'une requête lorsque je demande la page au serveur.

Le passage de JQuery à JavaScript n'est pas évident, loin de là. Mais il apporte des plus indéniables, tout d'abord une réduction de la taille de votre fichier .js, une nette accélération des performances, et surtout vous devrez approfondir vos connaissances en JavaScript, cela n'est jamais perdu.