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.

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.
Webperformance und Page Speed 2021
mit Sven Wolfermann (maddesigns)
UX Design: Kitsch – du willst es doch auch!
mit Lutz Schmitt (Lutz Schmitt Design & Consulting)
SEO loves PR: Wie zwei Disziplinen gemeinsam erfolgreich sein können
mit Anne Kiefer (sexeedo GmbH)
Advanced Web Pentesting
mit Christian Schneider (Schneider IT-Security)
What Star Wars Taught Me About Secure System Design
mit Anne Oikarinen (Nixu Corporation)