Migrationsoption von jQuery zu reinem Javascript

Die JQuery-Bibliothek wurde 2006 erstellt, um die fehlende Javascript-Funktionalität auszugleichen. Letzteres ist seitdem in seiner Entwicklung so weit fortgeschritten, dass Entwickler auf jQuery verzichten können, dessen Hauptproblem die Leistung ist.



Auf Habré gab es mehrere Artikel mit objektiven Messungen der "Hemmung" von JQuery bei Selektorabfragen.
// 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
(10.000-mal laufen)

Es gibt ziemlich viele gute Beschreibungen von Analoga von jQuery-Funktionen auf reinem Javascript-e im Netzwerk - zum Beispiel hier .

Die eigentliche Kraft von jQuery liegt jedoch in der Prägnanz und Schönheit seiner Ausdrucksformen. Es ist sogar psychologisch schwierig, vorhandenen Code neu zu schreiben und elegantes $ () in mehrzeilige Konstruktionen umzuwandeln.

Versuchen wir, die JQuery-Sprache so weit wie möglich zu belassen und sie [teilweise] selbst zu ersetzen. Dazu müssen wir nur die Funktion $ () neu definieren oder durch unsere eigene ersetzen (was besser ist) - sei es $ jqr (). Es wird auch ein Objekt zurückgegeben, das jedoch bereits "nativ" ist und nicht mit jQuery-Funktionen belastet ist, die wir nicht benötigen.

Codebeispiel:

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

JQuery-Code:

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

Änderungen an:

 $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; } } } 

Es ist wünschenswert, sel im Klassenkonstruktor zu analysieren, um querySelectorAll (), getElementsByClassName () und getElementById () effizienter zu verwenden.

Somit können wir in der JQR-Klasse nur die Funktionen implementieren, die wir benötigen, ohne über das Standard-Javascript hinauszugehen und ohne den vorhandenen Code stark zu berühren.

Es ist nicht einmal notwendig, jQuery vollständig zu entfernen - eine teilweise Optimierung führt bereits zu einem Ergebnis.

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


All Articles