Option de migration de jQuery vers javascript pur

La bibliothèque JQuery a été créée en 2006 pour compenser la fonctionnalité Javascript manquante. Depuis lors, ce dernier a suffisamment avancé dans son développement pour que les développeurs puissent se passer de jQuery, dont le principal problème est la performance.



Sur Habré, il y avait plusieurs articles avec des mesures objectives de "l'inhibition" de JQuery sur les requêtes de sélecteurs.
// jQuery 2.0 var c = $("#comments .comment"); 
4 649 ms
 // jQuery 2.0 var c = $(".comment"); 
3,437 ms
 // native querySelectorAll var c = document.querySelectorAll("#comments .comment"); 
1,362 ms
 // native querySelectorAll var c = document.querySelectorAll(".comment"); 
1,168 ms
 // native getElementById / getElementsByClassName var n = document.getElementById("comments"); var c = n.getElementsByClassName("comment"); 
107 ms
 // native getElementsByClassName var c = document.getElementsByClassName("comment"); 
75 ms
(exécuté dans un cycle de 10 000 fois)

Il y a pas mal de bonnes descriptions d'analogues de fonctions jQuery sur Javascript-e pur sur le réseau - par exemple, ici .

Mais la puissance même de jQuery réside dans la concision et la beauté de ses expressions. Il est même psychologiquement difficile de réécrire le code existant, en changeant l'élégant $ () en constructions multi-lignes.

Essayons de laisser le langage JQuery autant que possible, en le remplaçant [partiellement] lui-même. Pour ce faire, il suffit de redéfinir la fonction $ () ou de remplacer (ce qui est mieux) par la nôtre - que ce soit $ jqr (). Il retournera également un objet, mais déjà «natif» et non surchargé de fonctions jQuery dont nous n'avons pas besoin.

Exemple de code:

 <html> <body> <p id="message"></p> </body> </html> 

Code JQuery:

 $("#message").html("Hello world!"); 

Modifications apportées à:

 $jqr("#message").html("Hello world!"); // JQuery Replacement function $jqr(sel) { return new JQR(sel); } class JQR { constructor(sel) { this.sel = sel; this.elements = document.querySelectorAll(sel); } html(str) { for (var i = 0; i < this.elements.length; i++) { this.elements[i].innerHTML = str; } } } 

Il est souhaitable d'analyser sel dans le constructeur de classe afin d'utiliser plus efficacement querySelectorAll (), getElementsByClassName () et getElementById ().

Ainsi, nous ne pouvons implémenter dans la classe JQR que les fonctions dont nous avons besoin, sans aller au-delà du Javascript standard et sans trop toucher au code existant.

Il n'est même pas nécessaire de se débarrasser complètement de jQuery - une optimisation partielle donnera déjà un résultat.

Source: https://habr.com/ru/post/fr419471/


All Articles