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

Schritte zum Einrichten einer HTTPS-Website basierend auf Nginx

Inhaltsverzeichnis Vorwort: Verschlüsselungsalgor...

So versetzen Sie JavaScript in den Ruhezustand oder in den Wartezustand

Inhaltsverzeichnis Überblick Überprüfen von setTi...

Lösen Sie schnell das Problem des langsamen Tomcat-Starts, super einfach

Heute habe ich einem Klassenkameraden geholfen, e...

Zwei Verwendungen von iFrame-Tags in HTML

Ich habe kürzlich an einem Projekt gearbeitet – B...

Ein Bugfix für Tomcats automatisches Herunterfahren

Vorwort Bei einem seit 4 Jahren laufenden Java EE...

So erstellen, speichern und laden Sie Docker-Images

Es gibt drei Möglichkeiten, ein Image zu erstelle...

Analyse der Protokolldateien im Tomcat-Protokollverzeichnis (Zusammenfassung)

Bei jedem Start von Tomcat werden die folgenden P...

CSS-Pseudoklasse: empty makes me shine (Beispielcode)

Jeder, der meine Artikel in letzter Zeit gelesen ...

Sammlung von 25 Schriftarten, die in berühmten Website-Logos verwendet werden

In diesem Artikel sind die Schriftarten zusammeng...

Ein netter HTML-Druckcode unterstützt das Umblättern

ylbtech_html_drucken HTML-Druckcode, unterstützt S...

HTML-Grundlagen - CSS-Stylesheets, Style-Attribute, Format- und Layoutdetails

1. Position : fest Gesperrte Position (relativ zu...