Lassen Sie sich das Funktionsprinzip von JavaScript erklären

Lassen Sie sich das Funktionsprinzip von JavaScript erklären

Um zu verstehen, wie JavaScript ausgeführt wird und welchen Funktionsmechanismus es hat, müssen wir zunächst den Kernel des Browsers verstehen:

Browserkernel

Wer sich damit auskennt, weiß, dass verschiedene Browser aus unterschiedlichen Kerneln bestehen. Welche Kernel gibt es also und welche Kernel werden von unseren häufig verwendeten Browsern verwendet:

  • Gecko: Wurde früher von den Browsern Netscape und Mozilla Firefox verwendet;
  • Trident: Von Microsoft entwickelt, von den Browsern IE4 bis IE11 verwendet, aber der Edge-Browser ist auf Blink umgestiegen;
  • Webkit: Von Apple basierend auf KHTML entwickelt, Open Source, in Safari verwendet und zuvor von Google Chrome verwendet;
  • Blink: Ein von Google entwickelter Zweig von Webkit, der derzeit in Google Chrome, Edge, Opera usw. verwendet wird.

Als sogenannter Browserkernel bezeichnet man die Satz-Engine des Browsers, also die Browser-Engine. Der Arbeitsausführungsprozess der Engine läuft wie folgt ab:

Bildbeschreibung hier einfügen

Aber was sollen wir während dieses Ausführungsprozesses tun, wenn wir beim Parsen von HTML auf JavaScript-Tags stoßen?
Es wird die HTML-Analyse beenden und JavaScript-Code laden und ausführen.

Warum den JavaScript-Code nicht einfach asynchron laden und ausführen, anstatt hier anzuhalten?

Daher möchte der Browser das von HTML analysierte DOM und das DOM nach JavaScript-Operationen zusammenführen, um den endgültigen DOM-Baum zu generieren, anstatt häufig neue DOM-Bäume zu generieren.

Also, wer führt den JavaScript-Code aus?
Antwort: JavaScript Engine

JavaScript-Engine

Warum brauchen wir eine JavaScript-Engine?

  • Tatsächlich ist es egal, ob Sie das von uns geschriebene JavaScript zur Ausführung an den Browser oder an Node übergeben, es wird letztendlich von der CPU ausgeführt.
  • Die CPU erkennt jedoch nur ihren eigenen Befehlssatz, der eigentlich die Maschinensprache ist und von der CPU ausgeführt werden kann.
  • Wir benötigen also eine JavaScript-Engine, die uns dabei hilft, JavaScript-Code zur Ausführung in CPU-Anweisungen zu übersetzen.

Was sind die gängigen JavaScript-Engines?

  • SpiderMonkey: Die erste JavaScript-Engine, entwickelt von Brendan Eich (dem Autor von JavaScript);
  • Chakra: Von Microsoft entwickelt und im Internet Explorer verwendet.
  • JavaScriptCore – JavaScript-Engine in WebKit, entwickelt von Apple.
  • V8: Eine leistungsstarke JavaScript-Engine, die von Google entwickelt wurde und mit der sich Chrome von vielen anderen Browsern abhebt. (V8 ist eine leistungsstarke JavaScript-Engine)

V8-Motor

  • V8 ist Googles Open-Source-Hochleistungs-JavaScript- und WebAssembly-Engine, die in C++ geschrieben ist und unter anderem in Chrome und Node.js verwendet wird.
  • Es implementiert ECMAScript und WebAssembly und läuft auf Windows 7 oder höher, macOS 10.12+ und Linux-Systemen mit x64-, IA-32-, ARM- oder MIPS-Prozessoren.
  • V8 kann eigenständig ausgeführt oder in jede C++-Anwendung eingebettet werden.

Das Funktionsprinzip der V8-Engine zur Ausführung von JavaScript-Code:

Das Parse-Modul konvertiert JavaScript-Code in AST (Abstract Syntax Tree), da der Interpreter JavaScript-Code nicht direkt versteht;

  • Wenn die Funktion nicht aufgerufen wird, wird sie nicht in AST konvertiert;
  • Offizielle V8-Dokumentation von Parse: https://v8.dev/blog/scanner

Ignition ist ein Interpreter, der AST in ByteCode konvertiert

  • Gleichzeitig sammelt es die für die TurboFan-Optimierung erforderlichen Informationen (z. B. die Typinformationen der Funktionsparameter, die für echte Berechnungen erforderlich sind).
  • Wenn die Funktion nur einmal aufgerufen wird, interpretiert und führt Ignition den ByteCode aus.
  • Offizielle V8-Dokumentation von Ignition: https://v8.dev/blog/ignition-interpreter

TurboFan ist ein Compiler, der Bytecode in Maschinencode kompiliert, den die CPU direkt ausführen kann.

  • Wenn eine Funktion mehrmals aufgerufen wird, wird sie als Hot-Funktion markiert und anschließend von TurboFan in optimierten Maschinencode umgewandelt, um die Ausführungsleistung des Codes zu verbessern.
  • Der Maschinencode wird jedoch tatsächlich in ByteCode wiederhergestellt. Dies liegt daran, dass sich der Typ während der nachfolgenden Ausführung der Funktion ändert (z. B. hat die Summenfunktion ursprünglich den Zahlentyp ausgeführt, später aber zum Zeichenfolgentyp gewechselt), der zuvor optimierte Maschinencode die Operation nicht korrekt verarbeiten kann und wieder in Bytecode umgewandelt wird.
  • Offizielle V8-Dokumentation von TurboFan: https://v8.dev/blog/turbofan-jit

Das Obige ist der Ausführungsprozess des JavaScript-Codes

Lernen, aufzeichnen und sich gegenseitig ermutigen!

Dies ist das Ende dieses Artikels über die Funktionsweise von JavaScript. Weitere Informationen zur Funktionsweise von JavaScript finden Sie in früheren Artikeln auf 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, Sie werden 123WORDPRESS.COM auch in Zukunft unterstützen!

Das könnte Sie auch interessieren:
  • Detaillierte Erläuterung des JavaScript-Betriebsmechanismus und eine kurze Diskussion über Event Loop
  • Lernen Sie den Funktionsmechanismus von jsBridge in einem Artikel kennen
  • Detaillierter Prozess zur Installation von Docker, zum Erstellen von Images, zum Laden und Ausführen von NodeJS-Programmen
  • So führen Sie JavaScript in Jupyter Notebook aus
  • Lösen Sie das Problem, dass das Ausführen von JS-Dateien im Knotenterminal die ES6-Syntax nicht unterstützt
  • Tutorial zum Kompilieren und Ausführen von HTML-, CSS- und JS-Dateien in Visual Studio Code
  • Beispiel für die Ausführung von JavaScript mit Golang
  • Front-End-JavaScript-Funktionsprinzip

<<:  Der einfachste Weg, das MySQL-Root-Passwort zurückzusetzen

>>:  Detaillierte Erläuterung der Nginx-Statusüberwachung und Protokollanalyse

Artikel empfehlen

Der Vue.js-Cloud-Speicher realisiert die Bild-Upload-Funktion

Vorwort Tipp: Das Folgende ist der Hauptinhalt di...

Einführung in die Verwendung des http-equiv-Attributs im Meta-Tag

Meta ist ein Hilfstag im Kopfbereich der HTML-Spra...

JavaScript zum Implementieren des Slider-Verifizierungscodes

In diesem Artikel wird der spezifische JavaScript...

MySQL-Replikation - ausführliche Erklärung und einfaches Beispiel

MySQL-Replikation - ausführliche Erklärung und ei...

Zusammenfassung der Ereignisbehandlung im Vue.js-Frontend-Framework

1. v-on-Ereignisüberwachung Um DOM-Ereignisse abz...

So verwenden Sie async und await richtig in JS-Schleifen

Inhaltsverzeichnis Übersicht (Loop-Modus – Allgem...

setup+ref+reactive implementiert Vue3-Reaktionsfähigkeit

Das Setup wird zum Schreiben kombinierter APIs ve...

Detaillierte Einführung in TABLE-Tags (TAGS)

Grundlegende Syntax der Tabelle <table>...&l...

Detaillierte Erläuterung des Befehls zum Bereinigen des MySQL-Datenbank-Binlogs

Überblick Heute werde ich hauptsächlich erklären,...