Wir wissen, dass DOM eine Anwendungsprogrammierschnittstelle zum Betreiben von XML- und HTML-Dokumenten ist und es sehr teuer ist, Skripte zum Betreiben von DOM zu verwenden. Es gibt eine treffende Metapher: Stellen Sie sich vor, dass DOM und JavaScript (hier ECMScript) jeweils eine Insel sind und durch eine Mautbrücke verbunden sind. Jedes Mal, wenn ECMAScript auf das DOM zugreift, muss es diese Brücke passieren und eine „Brückengebühr“ zahlen. Je öfter Sie auf das DOM zugreifen, desto höher sind die Kosten. Daher besteht die empfohlene Vorgehensweise darin, so wenig Brücken wie möglich zu überqueren und zu versuchen, auf der ECMAScript-Insel zu bleiben. Es ist für uns unmöglich, die DOM-Schnittstelle nicht zu verwenden. Wie können wir also die Effizienz des Programms verbessern?
1. DOM-Zugriff und -Änderung
Der Zugriff auf DOM-Elemente ist kostspielig (Sie kennen die „Maut“), und das Ändern von Elementen ist noch kostspieliger, da der Browser dadurch die geometrischen Änderungen der Seite neu berechnen muss (Umfließen und Neuzeichnen).
Das schlimmste Szenario ist natürlich der Zugriff auf oder die Änderung von Elementen in einer Schleife. Sehen Sie sich die folgenden beiden Codeteile an:
var times = 15000; // code1 console.time(1); for(var i = 0; i < times; i++) { document.getElementById('myDiv1').innerHTML += 'a'; } console.timeEnd(1); // code2 console.time(2); var str = ''; for(var i = 0; i < times; i++) { str += 'a'; } document.getElementById('myDiv2').innerHTML = str; console.timeEnd(2);
Dadurch war die erste Laufzeit tausendmal länger als beim zweiten Mal! (Chromversion 44.0.2403.130 m)
1: 2846.700ms 2: 1.046ms
Das Problem mit dem ersten Codeteil besteht darin, dass bei jeder Schleifeniteration zweimal auf das Element zugegriffen wird: einmal, um den Wert von innerHTML zu lesen, und ein anderes Mal, um ihn neu zu schreiben, d. h. jedes Mal, wenn die Schleife die Brücke überquert ( re- Rudern und Neuzeichnen wird im nächsten Artikel erklärt)! Die Ergebnisse zeigen deutlich, dass der Code umso langsamer ausgeführt wird, je öfter auf das DOM zugegriffen wird. Daher wird die Anzahl der DOM-Zugriffe, die reduziert werden können, so weit wie möglich reduziert und die Verarbeitung so weit wie möglich der ECMAScript-Seite überlassen.
2. HTML-Sammlung und Durchqueren des DOM
Ein weiterer energieintensiver Punkt beim Betrieb von DOM ist das Durchlaufen von DOM. Im Allgemeinen sammeln wir eine Sammlung von HTML, z. B. mithilfe von getElementsByTagName () oder document.links usw. Ich denke, jeder ist damit vertraut. Das Ergebnis der Sammlung ist eine Array-ähnliche Sammlung, die in einem „Live-Status“ in Echtzeit vorliegt, was bedeutet, dass sie automatisch aktualisiert wird, wenn das zugrunde liegende Dokumentobjekt aktualisiert wird. Wie sagt man es? Es ist ganz einfach, eine Kastanie zu verschenken:
<body> <ul id='fruit'> <li> apple </li> <li> orange </li> <li> banana </li> </ul> </body> <script type="text/javascript"> var lis = document.getElementsByTagName('li'); var peach = document.createElement('li'); peach.innerHTML = 'peach'; document.getElementById('fruit').appendChild(peach); console.log(lis.length); // 4 </script>
Und hier kommt die Ineffizienz her! Es ist sehr einfach, genau wie die Optimierungsoperation des Arrays, das Zwischenspeichern der Längenvariablen ist in Ordnung (das Lesen der Länge einer Sammlung ist viel langsamer als das Lesen der Länge eines gewöhnlichen Arrays, da es jedes Mal abgefragt werden muss):
console.time(0); var lis0 = document.getElementsByTagName('li'); var str0 = ''; for(var i = 0; i < lis0.length; i++) { str0 += lis0[i].innerHTML; } console.timeEnd(0); console.time(1); var lis1 = document.getElementsByTagName('li'); var str1 = ''; for(var i = 0, len = lis1.length; i < len; i++) { str1 += lis1[i].innerHTML; } console.timeEnd(1);
Mal sehen, wie viel Leistungsverbesserung erreicht werden kann?
0: 0.974ms 1: 0.664ms
Wenn die Sammlung groß ist (die Demo beträgt 1000), ist die Leistungsverbesserung immer noch offensichtlich.
„Hochleistungs-JavaScript“ schlägt eine weitere Optimierungsstrategie vor, die besagt: „Da das Durchlaufen eines Arrays schneller ist als das Durchlaufen einer Sammlung, ist der Zugriff auf seine Eigenschaften schneller, wenn Sie zuerst die Sammlungselemente in das Array kopieren.“ hat dieses Muster nicht sehr gut offenbart, also kümmern Sie sich nicht darum. Der Testcode lautet wie folgt: (Wenn Sie Fragen haben, können Sie diese gerne mit mir besprechen)
console.time(1); var lis1 = document.getElementsByTagName('li'); var str1 = ''; for(var i = 0, len = lis1.length; i < len; i++) { str1 += lis1[i].innerHTML; } console.timeEnd(1); console.time(2); var lis2 = document.getElementsByTagName('li'); var a = []; for(var i = 0, len = lis2.length; i < len; i++) a[i] = lis2[i]; var str2 = ''; for(var i = 0, len = a.length; i < len; i++) { str2 += a[i].innerHTML; } console.timeEnd(2);
Am Ende dieses Abschnitts stellen wir zwei native DOM-Methoden vor: querySelector() und querySelectorAll(). Erstere gibt ein Array zurück (beachten Sie, dass sich ihre Rückgabewerte nicht dynamisch ändern). wie HTML-Sammlungen), und letzteres gibt das erste übereinstimmende Element zurück. Nun, es ist nicht immer besser als die HTML-Sammlungsdurchquerung des ersteren.
console.time(1); var lis1 = document.getElementsByTagName('li'); console.timeEnd(1); console.time(2); var lis2 = document.querySelectorAll('li'); console.timeEnd(2); // 1: 0.038ms // 2: 3.957ms
Da es sich jedoch um eine CSS-ähnliche Auswahlmethode handelt, ist sie bei der Kombinationsauswahl effizienter und bequemer. Führen Sie beispielsweise die folgende kombinierte Abfrage aus:
var elements = document.querySelectorAll('#menu a'); var elements = document.querySelectorAll('div.warning, div.notice');
Das Obige dreht sich alles um die leistungsstarke JavaScript-DOM-Programmierung. Ich hoffe, Sie können es verstehen und es wird Ihnen beim Lernen helfen.

JavaScript stammt aus dem Jahr 1995 und wurde von Brandon Ike erstellt und realisierte die Sprache in C. 1.C-Sprache bietet Programmierfunktionen auf hoher Leistung und Systemebene für JavaScript. 2. Die Speicherverwaltung und die Leistungsoptimierung von JavaScript basieren auf C -Sprache. 3. Die plattformübergreifende Funktion der C-Sprache hilft JavaScript, auf verschiedenen Betriebssystemen effizient zu laufen.

JavaScript wird in Browsern und Node.js -Umgebungen ausgeführt und stützt sich auf die JavaScript -Engine, um Code zu analysieren und auszuführen. 1) abstrakter Syntaxbaum (AST) in der Parsenstufe erzeugen; 2) AST in die Kompilierungsphase in Bytecode oder Maschinencode umwandeln; 3) Führen Sie den kompilierten Code in der Ausführungsstufe aus.

Zu den zukünftigen Trends von Python und JavaScript gehören: 1. Python wird seine Position in den Bereichen wissenschaftlicher Computer und KI konsolidieren. JavaScript wird die Entwicklung der Web-Technologie fördern. Beide werden die Anwendungsszenarien in ihren jeweiligen Bereichen weiter erweitern und mehr Durchbrüche in der Leistung erzielen.

Sowohl Python als auch JavaScripts Entscheidungen in Entwicklungsumgebungen sind wichtig. 1) Die Entwicklungsumgebung von Python umfasst Pycharm, Jupyternotebook und Anaconda, die für Datenwissenschaft und schnelles Prototyping geeignet sind. 2) Die Entwicklungsumgebung von JavaScript umfasst Node.JS, VSCODE und WebPack, die für die Entwicklung von Front-End- und Back-End-Entwicklung geeignet sind. Durch die Auswahl der richtigen Tools nach den Projektbedürfnissen kann die Entwicklung der Entwicklung und die Erfolgsquote der Projekte verbessert werden.

Ja, der Motorkern von JavaScript ist in C. 1) Die C -Sprache bietet eine effiziente Leistung und die zugrunde liegende Steuerung, die für die Entwicklung der JavaScript -Engine geeignet ist. 2) Die V8-Engine als Beispiel wird sein Kern in C geschrieben, wobei die Effizienz und objektorientierte Eigenschaften von C kombiniert werden.

JavaScript ist das Herzstück moderner Websites, da es die Interaktivität und Dynamik von Webseiten verbessert. 1) Es ermöglicht die Änderung von Inhalten, ohne die Seite zu aktualisieren, 2) Webseiten durch DOMAPI zu manipulieren, 3) Komplexe interaktive Effekte wie Animation und Drag & Drop, 4) die Leistung und Best Practices optimieren, um die Benutzererfahrung zu verbessern.

C und JavaScript erreichen die Interoperabilität durch WebAssembly. 1) C -Code wird in das WebAssembly -Modul zusammengestellt und in die JavaScript -Umgebung eingeführt, um die Rechenleistung zu verbessern. 2) In der Spieleentwicklung kümmert sich C über Physik -Engines und Grafikwiedergabe, und JavaScript ist für die Spiellogik und die Benutzeroberfläche verantwortlich.

JavaScript wird in Websites, mobilen Anwendungen, Desktop-Anwendungen und serverseitigen Programmierungen häufig verwendet. 1) In der Website -Entwicklung betreibt JavaScript DOM zusammen mit HTML und CSS, um dynamische Effekte zu erzielen und Frameworks wie JQuery und React zu unterstützen. 2) Durch reaktnatives und ionisches JavaScript wird ein plattformübergreifendes mobile Anwendungen entwickelt. 3) Mit dem Elektronenframework können JavaScript Desktop -Anwendungen erstellen. 4) Node.js ermöglicht es JavaScript, auf der Serverseite auszuführen und unterstützt hohe gleichzeitige Anforderungen.


Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

Video Face Swap
Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heißer Artikel

Heiße Werkzeuge

MinGW – Minimalistisches GNU für Windows
Dieses Projekt wird derzeit auf osdn.net/projects/mingw migriert. Sie können uns dort weiterhin folgen. MinGW: Eine native Windows-Portierung der GNU Compiler Collection (GCC), frei verteilbare Importbibliotheken und Header-Dateien zum Erstellen nativer Windows-Anwendungen, einschließlich Erweiterungen der MSVC-Laufzeit zur Unterstützung der C99-Funktionalität. Die gesamte MinGW-Software kann auf 64-Bit-Windows-Plattformen ausgeführt werden.

SublimeText3 Englische Version
Empfohlen: Win-Version, unterstützt Code-Eingabeaufforderungen!

SublimeText3 Linux neue Version
SublimeText3 Linux neueste Version

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Herunterladen der Mac-Version des Atom-Editors
Der beliebteste Open-Source-Editor
