JavaScript-Interpreter kommt in Chrome 53

V8 JavaScript Engine: Interpreter Ignition verbessert Speicherverbrauch
Kommentare

V8 – hauptsächlich in Google Chrome eingesetzt – soll die Leistung zur Laufzeit steigern, da JavaScript-Code bei der Ausführung durch Just-in-time-Kompilierung zuerst in nativen Maschinencode übersetzt wird. Um die Implementierung noch schneller zu machen, hat Google jetzt den Interpreter Ignition vorgestellt, der vor allem den Speicherverbrauch reduzieren soll.

Durch die Just-in-time-Kompilierung wird die JavaScript-Engine V8 erst richtig schnell. Allerdings bringt diese auch Probleme mit sich: JavaScript-Code wird zuerst geparst und in einen nicht-optimierten Zustand kompiliert. Durch das komplexe Zusammenspiel von Parser und Compiler wird mancher Code zwei- oder sogar dreimal geparst. Laut Google entfallen 33 Prozent der Anlaufzeit einer Website auf das Parsen und Kompilieren von Code durch V8 – und das führt wiederum zu einem enormen Speicherverbrauch.

Um diesen Overhead zu minimieren, hat das V8-Team nun einen neuen JavaScript-Interpreter namens Ignition entwickelt.

Ignition-Interpreter zündet den Turbo

Ignition soll den Basis-Compiler von V8 ersetzen und Code mit wesentlich geringerem Speicherverbrauch ausführen können. Damit ist der erste Schritt zu einer einfacheren Script-Execution-Pipeline gemacht. V8 kompiliert mit Ignition jetzt JavaScript-Funktionen zu einem kurzen Bytecode, der eine Größe von nur 25 bis 50 Prozent des entsprechenden Maschinencodes aufweist. Dieser Bytecode wird dann von einem Hochleistungs-Interpreter ausgeführt, der die Ausführungsgeschwindigkeit auf Echtzeit-Webseiten nahe an die des bestehenden Basis-Compilers heranbringt.

Erstmals wird der Interpreter in Chrome 53 für Android-Devices mit begrenztem RAM (512 MB oder weniger) zur Verfügung stehen, da hier Einsparungen im Speicherverbrauch besonders essentiell sind. Ergebnisse zeigen einen reduzierten Speicherverbrauch von fünf Prozent pro Chrome-Tab, so Google.

ignition pipeline

V8s Compilation-Pipeline mit Ignition, Quelle: V8-Blog

Was steckt hinter Ignition?

Ignition setzt dabei vor allem auf die Stärken des Compilers TurboFan. Damit lassen sich Bytecode-Handler für jeden Opcode erzeugen. TurboFan kompiliert diese Anweisungen dann zur Ziel-Architektur; als Ergebnis erhält man optimierten Interpreter-Code, der die Bytecode-Anweisungen ausführen und mit dem Rest der V8-Virtual-Machine ohne großen Overhead interagieren kann. Auf diese Weise wird der Speicherbedarf für zur Laufzeit kompilierten Code niedrig gehalten.

Rather than compiling to machine code, we’re compiling [with Ignition] to concise bytecodes that can be much smaller. So, we can reduce the memory usage, particularly with functions that aren’t executed very often. – Ross McIllroy, Google Staff Software Engineer

Für einen tieferen Einstieg in die Funktionsweise von Ignition empfiehlt sich ein Blick auf das Design-Dokument sowie auf den zugehörigen Blogpost.

Übrigens nutzen auch andere Browserhersteller bereits Interpreter: So setzt etwa Microsofts JavaScript-Engine Chakra auf Interpreter und ein zweistufiges Kompilierungssystem.

Unsere Redaktion empfiehlt:

Relevante Beiträge

Meinungen zu diesem Beitrag

X
- Gib Deinen Standort ein -
- or -