jQuery doit mourir

Ok, le titre est un peu exagéré. Mais jQuery est devenu somme toute une tare dans la programmation JavaScript. Aujourd'hui, utiliser jQuery retarde l'apprentissage du JavaScript. jQuery demande le chargement d'une bibliothèque de plus de 200 kibioctets, ce qui peut paraître léger pour un ordinateur de bureau, mais très lourd pour un mobile. Et son utilisation, tout comme n'importe quelle bibliothèque, impose souvent ce constat : on charge du code qui ne sera jamais utilisé.

Ceci dit, je dois reconnaître les bons coups de jQuery, et sa grande pertinence au moment où il a été créé. Le projet est publié pour la première fois en janvier 2006, à un moment où Internet Explorer 7 n'était même pas encore sorti. Et Internet Explorer 6, rempli de bogues. Mozilla Firefox gagnait des parts de marché. Google Chrome n'existait pas. Bref, à ce moment-là jQuery facilitait l'utilisation de JavaScript, un langage qui n'était pas interprété de la même façon par les deux navigateurs concurrents, dont l'un avait été littéralement abandonné par son éditeur (IE6 était sorti en 2001). jQuery "patchait" les lacunes de l'un et même parfois celles de l'autre. jQuery permettait alors de coder du JavaScript sans se soucier si c'était du JavaScript IE ou du JavaScript Mozilla.

Depuis sa création, Google Chrome est apparu, utilisant le même moteur de rendu que KHTML, un navigateur sous Linux. Respectueux des standards du web, tout comme Mozilla Firefox, et agressif du côté de sa mise en marché, il est devenu le navigateur dominant, éclipsant Internet Explorer. Microsoft renomme IE en Edge, et finit par utiliser le même moteur de rendu que Chrome, étant devant le fait accompli qu'il ne pouvait pas suivre la cadence de l'évolution des standards, face à deux navigateurs concurrents utilisant des moteurs de rendu à code source ouvert. Depuis que jQuery est né, les téléphones cellulaires ont fait leur apparition, avec le premier iPhone en 2007, suivi d'Android peu de temps après, et qui a fait que la majorité de la navigation web se fait sur mobile que sur un ordinateur de bureau. Tous ces navigateurs tournent avec un moteur JavaScript respectant un standard ECMAScript. jQuery n'a ici plus besoin de "patcher".

Donc aujourd'hui, les navigateurs doivent exécuter du code JavaScript court et rapide à exécuter. L'utilisation de jQuery permettait de coder court, mais jQuery lui-même ne l'était vraiment pas. Et plus il y a de code JavaScript dans une page, plus la création d'objets jQuery (à force de faire des $() par ci, et des $() par là), devient lourde en mémoire. Et à mesure que le JavaScript évolue, avec l'apparition de querySelector() et querySelectorAll(), ainsi que de fetch() et closest(), plus le besoin de recourir à jQuery s'amenuise. Tant et si bien qu'en 2022, jQuery n'est carrément plus utile.

Non seulement, il n'est plus utile, mais il nuit à la compréhension pour le novice de ce qu'est le DOM. À force de vouloir encapsuler les éléments de la page web dans ses objets, jQuery crée une distance inutile pour traiter la page web.

Qui plus est, sur des sites en maintenance, il peut conduire à l'apparition de code mort. document.getElementById('serie').classList.add('fr') est équivalent à $('#serie').addClass('fr'). Mais si plus tard, on supprime du code HTML l'élément "#serie", le code jQuery continuera de s'exécuter sans aucun message d'erreur, alors qu'il aurait dû être supprimé aussi en même temps.

De plus, le code jQuery exécute une création d'objet jQuery contenant une liste d'objets sur laquelle il va itérer pour ajouter à tous les éléments la classe 'fr', alors que le programmeur sait très bien qu'il n'a pas de liste à impliquer dans son opération. En termes de rapidité, document.getElementById('serie') est 25 fois plus rapide que $('#serie').

Voilà pourquoi en partie l'existence de ce blogue. Je veux faire connaître JavaScript dans ce qu'il a de plus pur, sans bibliothèques. Vous remarquerez alors à quel point le langage est rapide et puissant lorsqu'il est débarrassé de cossins voulant révolutionner ce qui est déjà révolutionnaire.

Haut de page