Firefox 22: asm.js und OdinMonkey sollen JavaScript beschleunigen

asm.js ist eine Untermenge von JavaScript, die verlangsamende Eigenheiten der Sprache eliminieren soll. Das damit arbeitende Optimierungsmodul OdinMonkey ist in einem Nightly Build von Firefox aufgetaucht; es soll in Firefox 22 aktiviert sein.

In Pocket speichern vorlesen Druckansicht 135 Kommentare lesen
Lesezeit: 3 Min.
Von
  • Julia Schmidt

OdinMonkey, ein mit asm.js arbeitendes Optimierungsmodul für die JavaScript-Engine von Firefox, ist in einem Nightly Build des Webbrowser aufgetaucht und soll laut Plan im 22. Major Release des Browsers im Juni erscheinen. asm.js ist eine Untermenge von JavaScript, die verlangsamende Eigenheiten der Sprache wie die automatische Garbage Collection und Boxed Values eliminiert und sich so dem Modell von C/C++ annähert.

Die Spezifikationen von asm.js beschreiben lediglich wie kompatibler Code auszusehen hat, semantisch werden die Vorgaben von ECMAScript eingehalten. asm.js-Code ist in Module verpackt, die die folgende Struktur aufweisen:

function MyAsmModule(stdlib, foreign, heap) {
"use asm"; // marks this function as an asm.js module

// module body:

function f1(...) { ... }
function f2(...) { ... }
...

return {
export1: f1,
export2: f2,
...
};
}

Dabei sind die drei Parameter stdlib, foreign und heap optional. Bevor sich der Code nutzen lässt, muss er einen Ahead-of-Time-Compiler (AOT) durchlaufen, der eine schnelle ausführbare Datei beim Laden erstellt. Die meisten JavaScript-Engines nutzen im Vergleich dazu Just-In-Time-Compiler, die eine eher langsame Version umsetzen. Die Module werden darüber hinaus gleich aufgerufen und mit ihren externen Abhängigkeiten (stdlib und foreign) verbunden.

asm.js-Code ist statisch typisiert und kann nur eingeschränkt auf JavaScripts Standardbibliotheken zugreifen – es stehen ihm überwiegend mathematische Funktionen zur Verfügung. asm.js ist nicht zum manuellen Schreiben entworfen, sondern soll als Ziel für Compiler und andere Sprachen dienen. Ein Beispiel zum Erstellen von konformen Code ist Emscripten, ein Compiler der C- oder C++-Code mit llvm-gcc oder Clang-Compilern in LLVM-Bitcode und den dann in JavaScript für Browser wandelt. Emscriptens Erfinder Alon Zkai ist Teil des asm.js-Teams, weshalb jetzt eine modifizierte Version zum Erstellen von asm.js-Code zur Verfügung steht. Erste Vergleiche mit Firefox SpiderMonkey, Chromes V8 und nativem Code zeigen, dass OdinMonkey, also eine Version von SpiderMonkey die asm.js unterstützt, deutlich besser abschneidet. Im zlib-Benchmark schafft es die ausgebaute JavaScript-Engine beispielsweise, nur 1,61-mal langsamer als der native Code zu sein, während das reine Spidermonkey 5,15-mal und V8 5,95-mal langsamer ist.

Vergleich verschiedener Browser mit ihren internen JavaScript-Engines mit nativem Code. Letzterer dient als Baseline, die anderen Zahlen zeigen um wie viele mal die Implementierung langsamer ist.


Die Entwicklung von asm.js und OdinMonkey stehen allerdings noch am Anfang. Testen können interessierte Entwickler das neue Projekt nur auf Windows oder Linux mit x86/x64, die Implementierungen für Mac OS X und Firefox für ARM sind wohl noch nicht ganz fertig. Um asm.js beziehungsweise OdinMonkey zu nutzen, muss das Flag javascript.options.experimental_asmjs ind about:config gesetzt sein – im Betastatus ist erst einmal geplant, es zu deaktivieren. Spezifikation und Implementierung werden in den nächsten Monaten noch einige Änderungen erfahren und auch andere Sprachen, beispielsweise LLJS, sollen in Zukunft angeboten werden.

Nähere Informationen zu asm.js lassen sich den FAQs auf der Website des Projekts entnehmen. Darüber hinaus ist der Blogeintrag von Dr. Axel Rauschmayer zu empfehlen. (jul)