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

So starten Sie ein Vue-Projekt mit dem M1 Pro-Chip

Inhaltsverzeichnis Einführung Homebrew installier...

Welche Bilddateiformate gibt es und wie wählt man sie aus?

1. Welche drei Formate? Dies sind: gif, jpg und pn...

Einführung in die grafischen Kompositions- und Satzfunktionen des Webdesigns

Alles braucht ein Fundament. Um ein Haus zu bauen...

Detaillierte Erklärung des JavaScript-Timer-Prinzips

Inhaltsverzeichnis 1. setTimeout()-Timer 2. Stopp...

Vue implementiert die Tabellenpaging-Funktion

In diesem Artikelbeispiel wird der spezifische Co...

So implementieren Sie den Vue-Timer

In diesem Artikelbeispiel wird der spezifische Co...

Lösen Sie das MySQL 5.7.9 Version sql_mode=only_full_group_by Problem

MySQL 5.7.9 Version sql_mode=only_full_group_by P...

Angular Cookie Lese- und Schreibvorgangscode

Lese- und Schreibvorgänge bei Angular Cookies, de...

3 Funktionen der toString-Methode in js

Inhaltsverzeichnis 1. Drei Funktionen der toStrin...

Wertschätzung des dezenten und eleganten Webdesigns in Schwarz, Weiß und Grau

Unter den klassischen Farbkombinationen kann wohl...

14 Techniken für leistungsstarke Websites

Original : http://developer.yahoo.com/performance...