JavaScript interpretiert oder kompiliert?

Computer können den Code, den Sie in JavaScript (oder einer anderen Sprache) schreiben, nicht ausführen. Computer können nur Computercode ausführen. Der Computercode, den ein bestimmter Computer ausführen kann, ist in dem Prozessor definiert, der diese Befehle ausführen soll, und kann für verschiedene Prozessoren unterschiedlich sein.

Offensichtlich war es für die Leute schwierig, Maschinencode zu schreiben (ist 125 ein Addierbefehl oder ist es 126 oder vielleicht 27). Um dieses Problem zu umgehen, wurden sogenannte Assemblersprachen erstellt. Diese Sprachen verwendeten offensichtlichere Namen für die Befehle (wie ADD zum Hinzufügen) und machten es somit überflüssig, sich die genauen Maschinencodes zu merken. Assemblersprachen haben immer noch eine Eins-zu-eins-Beziehung zu dem bestimmten Prozessor- und Maschinencode, in den der Computer diese Befehle konvertiert.

Assemblersprachen müssen kompiliert oder interpretiert werden

Sehr früh wurde erkannt, dass einfacher zu schreibende Sprachen benötigt werden und dass der Computer selbst verwendet werden kann, um diese in die Maschinencode-Anweisungen zu übersetzen, die der Computer tatsächlich verstehen kann. Es gab zwei Ansätze, die mit dieser Übersetzung verfolgt werden konnten, und beide Alternativen wurden ausgewählt (entweder wird die eine oder die andere verwendet, abhängig von der verwendeten Sprache und dem Ort, an dem sie ausgeführt wird)..

Eine kompilierte Sprache ist eine Sprache, in der Sie nach dem Schreiben des Programms den Code über ein Programm namens Compiler eingeben und eine Maschinencodeversion des Programms erstellen. Wenn Sie das Programm dann ausführen möchten, rufen Sie einfach die Maschinencodeversion auf. Wenn Sie Änderungen am Programm vornehmen, müssen Sie es neu kompilieren, bevor Sie den geänderten Code testen können.

Eine interpretierte Sprache ist eine Sprache, in der die Anweisungen von dem, was Sie geschrieben haben, in Maschinencode konvertiert werden, während das Programm ausgeführt wird. Eine interpretierte Sprache erhält im Grunde eine Anweisung von der Programmquelle, konvertiert sie in Maschinencode, führt diesen Maschinencode aus und holt sich dann die nächste Anweisung von der Quelle, um den Vorgang zu wiederholen.

Zwei Varianten zum Kompilieren und Interpretieren

Eine Variante verwendet ein zweistufiges Verfahren. Bei dieser Variante wird die Quelle Ihres Programms nicht direkt in den Maschinencode übersetzt, sondern in eine Assembler-ähnliche Sprache konvertiert, die vom jeweiligen Prozessor noch unabhängig ist. Wenn Sie den Code ausführen möchten, verarbeitet er diesen kompilierten Code über einen für den Prozessor spezifischen Interpreter, um den für diesen Prozessor geeigneten Maschinencode zu erhalten. Dieser Ansatz bietet viele Vorteile des Kompilierens bei gleichzeitiger Wahrung der Prozessorunabhängigkeit, da derselbe kompilierte Code von vielen verschiedenen Prozessoren interpretiert werden kann. Java ist eine Sprache, die diese Variante häufig verwendet.

Die andere Variante heißt Just in Time Compiler (oder JIT). Mit diesem Ansatz führen Sie den Compiler nicht wirklich aus, nachdem Sie Ihren Code geschrieben haben. Dies geschieht stattdessen automatisch, wenn Sie den Code ausführen. Bei Verwendung eines Just in Time-Compilers wird der Code nicht Anweisung für Anweisung interpretiert, sondern jedes Mal, wenn er zur Ausführung aufgerufen wird, auf einmal kompiliert. Anschließend wird die soeben erstellte kompilierte Version ausgeführt. Bei diesem Ansatz sieht es so aus, als würde der Code interpretiert, außer dass Fehler nur dann gefunden werden, wenn die Anweisung mit dem Fehler erreicht ist. Alle vom Compiler erkannten Fehler führen dazu, dass nicht der Code, sondern der gesamte Code ausgeführt wird bis zu diesem Zeitpunkt ausgeführt. PHP ist ein Beispiel für eine Sprache, die normalerweise die Just-in-Time-Kompilierung verwendet.

Ist JavaScript kompiliert oder interpretiert?

Jetzt wissen wir also, was interpretierter Code und kompilierter Code bedeuten. Die Frage, die wir als nächstes beantworten müssen, ist, was all dies mit JavaScript zu tun hat. Abhängig davon, wo Sie Ihr JavaScript ausführen, kann der Code kompiliert oder interpretiert werden oder es kann eine der beiden anderen genannten Varianten verwendet werden. Die meiste Zeit läuft Ihr JavaScript in einem Webbrowser und dort wird das JavaScript normalerweise interpretiert.

Interpretierte Sprachen sind normalerweise langsamer als kompilierte Sprachen. Dafür gibt es zwei Gründe. Erstens muss der zu interpretierende Code interpretiert werden, bevor er ausgeführt werden kann, und zweitens muss dies jedes Mal geschehen, wenn die Anweisung ausgeführt werden soll (nicht nur bei jedem Ausführen von JavaScript, sondern auch, wenn sie sich in einer Schleife befindet) muss jedes Mal in der Schleife durchgeführt werden). Dies bedeutet, dass in JavaScript geschriebener Code langsamer ausgeführt wird als in vielen anderen Sprachen geschriebener Code.

Wie hilft es uns, wenn wir wissen, dass JavaScript die einzige Sprache ist, die für alle Webbrowser zur Verfügung steht? Der in den Webbrowser integrierte JavaScript-Interpreter selbst ist nicht in JavaScript geschrieben. Stattdessen wird es in einer anderen Sprache geschrieben, die dann kompiliert wurde. Dies bedeutet, dass Sie Ihr JavaScript beschleunigen können, wenn Sie alle von JavaScript bereitgestellten Befehle nutzen können, mit denen Sie die Aufgabe in die JavaScript-Engine selbst verlagern können.

Beispiele für eine schnellere Ausführung von JavaScript

Ein Beispiel hierfür ist, dass einige, aber nicht alle Browser eine document.getElementsByClassName () -Methode in der JavaScript-Engine implementiert haben, während andere dies noch nicht getan haben. Wenn wir diese spezielle Funktionalität benötigen, können wir feststellen, dass der Code in den Browsern, in denen die JavaScript-Engine ihn bereitstellt, schneller ausgeführt wird, indem wir die Funktionserkennung verwenden, um festzustellen, ob die Methode bereits vorhanden ist, und nur dann eine eigene Version dieses Codes in JavaScript erstellen, wenn die JavaScript-Engine dies nicht tut. ' t es für uns zur Verfügung stellen. Wenn die JavaScript-Engine diese Funktionalität bietet, sollte sie schneller ausgeführt werden, wenn wir sie verwenden, anstatt unsere eigene, in JavaScript geschriebene Version auszuführen. Gleiches gilt für jede Verarbeitung, die die JavaScript-Engine für den direkten Aufruf zur Verfügung stellt.

Es wird auch Fälle geben, in denen JavaScript mehrere Möglichkeiten bietet, dieselbe Anfrage zu stellen. In diesen Fällen kann eine der Arten des Zugriffs auf die Informationen spezifischer sein als die andere. Beispiel: document.getElementsByTagName ('table') [0] .tBodies und document.getElementsByTagName ('table') [0] .getElementsByTagName ('tbody') rufen beide dieselbe Knotenliste der tbody-Tags in der ersten Tabelle im Web ab Die erste Seite ist jedoch ein spezifischer Befehl zum Abrufen der tbody-Tags, wobei die zweite Seite angibt, dass wir tbody-Tags in einem Parameter abrufen. Andere Werte können ersetzt werden, um andere Tags abzurufen. In den meisten Browsern wird die kürzere und spezifischere Variante des Codes schneller ausgeführt (in einigen Fällen viel schneller) als die zweite Variante. Daher ist es sinnvoll, die kürzere und spezifischere Version zu verwenden. Außerdem ist der Code einfacher zu lesen und zu warten.

In vielen dieser Fälle ist der tatsächliche Unterschied in der Verarbeitungszeit sehr gering, und nur wenn Sie viele solcher Codeauswahlen addieren, werden Sie einen merklichen Unterschied in der Ausführungszeit Ihres Codes feststellen. Es ist jedoch ziemlich selten, dass das Ändern des Codes, um ihn schneller laufen zu lassen, den Code erheblich länger oder schwerer zu warten macht, und oft ist das Gegenteil der Fall. Es gibt auch den zusätzlichen Vorteil, dass zukünftige Versionen von JavaScript-Engines erstellt werden können Das beschleunigt die spezifischere Variante noch weiter, sodass die Verwendung der spezifischen Variante dazu führen kann, dass Ihr Code in Zukunft schneller ausgeführt wird, ohne dass Sie etwas ändern müssen.