Menü
iX Magazin

Chromes "Kurbelwelle" optimiert JavaScript zur Laufzeit

Von
vorlesen Drucken Kommentare lesen 91 Beiträge

Optimierung lohnt sich nur, wenn der betreffende Code häufig ausgeführt wird – dieser Devise folgt der Compiler in der neuesten Inkarnation von Googles freier JavaScript-Engine V8. "Crankshaft" ("Kurbelwelle") entscheidet anhand von Laufzeitinformationen, welche Code-Teile durch Optimierung am meisten gewinnen können. Die Technik zahle sich, erklären die Entwickler, vor allem für große JavaScript-Programme aus – kurze Scripts, wie sie etwa der Sunspider-Benchmark verwendet, beschleunige sie kaum.

Crankshaft besteht aus vier Komponenten: einem Basis-Compiler, einem Profiler, dem optimierenden Compiler und einem "Entoptimierer". Der Basis-Compiler übersetzt den kompletten Code, nach Googles Angaben bis zu doppelt so schnell wie der V8-Compiler in der aktuellen Betaversion von Chrome. Er soll bis zu 30 Prozent kleineren Code erzeugen. Zur Laufzeit überwacht der Profiler das Verhalten des JavaScript-Programms und identifiziert die Stellen, die besonders viel Zeit benötigen. An ihnen setzt dann der optimierende Compiler an, der unter anderem Schleifen-Invarianten verschiebt, CPU-Register per Linear-Scan-Algorithmus (PDF) mit Variablen füllt und Funktionsaufrufe durch Inline-Code ersetzt. Dabei verhält er sich nach Googles Angaben "optimistisch", was zu Fehlern im optimierten Code führen kann. Diese soll der "Entoptimierer" erkennen und beheben.

Bislang gibt es Crankshaft nur in einer Version für 32-Bit-CPUs von Intel als eigenständigen Code oder in dem lediglich für Windows verfügbaren Chrome-Entwicklungszweig "Canary". Die Arbeit an ARM- und 64-Bit-Varianten hat begonnen. (ck)