Mozilla: Firefox beschleunigt Webassembly-Aufrufe über Javascript

Laut einem Mozilla-Entwickler funktionieren Webassembly-Aufrufe über Javascript-Code im Firefox mittlerweile deutlich zügiger. Dafür hat das Team unter anderem die C++-Zwischenschicht entfernt und zugleich den Speicherbedarf optimiert.

Artikel veröffentlicht am , Kristian Kißling/Linux Magazin/
Für Webassembly müssen die Browserhersteller viele Optimierungen vornehmen.
Für Webassembly müssen die Browserhersteller viele Optimierungen vornehmen. (Bild: Webassembly)

Für eine längere Zeit, schreibt der Mozilla-Entwickler Benjamin Bouvier in seinem Blogpost, waren Webassembly-Aufrufe mit Javascript überhaupt nicht optimiert und brauchten daher recht viel Zeit. Das lag demnach vor allem an diversen Umwegen im Code, die Bouvier gemeinsam mit seinem Team nun bearbeitet hat, was die Ausführung von Webassembly (Wasm) deutlich beschleunigen sollte.

Stellenmarkt
  1. Inbetriebnahme Koordinator (m/w/d) für Software
    Dürr Systems AG, Bietigheim-Bissingen
  2. IT-Systembetreuer (m/w/d)
    Erzbistum Paderborn, Paderborn
Detailsuche

Bisher nutzten Wasm-Aufrufe aus Javascript heraus zunächst einen Umweg über C++, um dann einen in Assembler geschriebenen Interpreter-Entry-Stub aufzurufen. Dieser Gluecode wiederum kopierte die C++-Argumente an jene Stellen, an denen Wasm-Funktionen sie erwarteten, setzte einen Maschinenstatus, rief die Funktion auf, übernahm dann auch die Fehlerbehandlung und kehrte unter Umständen zum C++-Aufruf zurück.

  • Die bisherige Variante nutzte C++ ... (Bild: Ashley Williams)
  • ... die neue Variante kommt ohne aus. (Bild: Ashley Williams)
Die bisherige Variante nutzte C++ ... (Bild: Ashley Williams)

Laut Blogpost entpuppte sich die Just-in-Time-Kompilierung dabei als zeitkritischer Teil. Der JIT-Compiler Ionmonkey verwandelte den Code erst in Bytecode. Rief eine derart verwandelte Javascript-Funktion dann WASM-Code auf, führte der Weg des Aufrufs zunächst wieder über C++, bevor er schließlich Webassembly erreichte.

C++ fällt weg

Dieser Umweg über C++ entfällt seit der Anfang Mai veröffentlichten Firefox-Version 60. Der JIT-Compiler macht seitdem keinen Unterschied mehr, ob er eine Javascript- oder eine Webassembly-Funktion aufruft. Für beide kommen dieselben Aufrufoptimierungen zum Einsatz.

Golem Akademie
  1. Elastic Stack Fundamentals - Elasticsearch, Logstash, Kibana, Beats
    26.-28. Oktober 2021, online
  2. IT-Sicherheit für Webentwickler
    2.-3. November 2021, online
  3. OpenShift Installation & Administration
    31. Januar-2. Februar 2022, online
Weitere IT-Trainings

Verantwortlich dafür ist unter anderem ein neuer Gluecode, der JIT-Entry-Stub. Dieser wird für jede exportierte Funktion erzeugt, konvertiert und entpackt die von der Javascript-Aufrufmethode gelesenen Argumente in die passenden primitiven WASM-Typen, setzt einige Maschinenregister, ruft die angepeilte WASM-Funktion auf und konvertiert das Ergebnis in ein Format, das auch der Javascript-Aufrufer versteht.

Weil so der Umweg über C++ entfällt, gelingen die Aufrufe nun deutlich schneller, wie auch einige Messungen zeigen, die Bouvier in seinem Blog vorstellt. Darüber hinaus ließe sich der Code künftig wohl noch weiter optimieren.

Speicher nach Bedarf

Die Kehrseite der Optimierung nennt Bouvier auch: Sie benötigt mehr Speicherplatz, weil für jede erzeugte Funktion eine ziemlich große Menge an Code für den JIT-Compiler anfällt. Das wird vor allem dann zum Problem, wenn der Code sogenannte Tables exportiert.

Den vergrößerten Speicherbedarf haben die Entwickler über Lazy-Stub-Generation für bestimmte Funktionen verringert. Grob vereinfacht werden die Stubs nur bei Bedarf erzeugt, was insgesamt deutlich weniger Speicher benötigt. Der Blogpost zeigt die Verbesserung in einem Benchmark, erklärt ausführlich die Details und nennt zudem noch einige weitere Neuerungen für Webassembly, an denen der Entwickler beteiligt ist.

Bitte aktivieren Sie Javascript.
Oder nutzen Sie das Golem-pur-Angebot
und lesen Golem.de
  • ohne Werbung
  • mit ausgeschaltetem Javascript
  • mit RSS-Volltext-Feed


FreiGeistler 09. Jul 2018

Was die Timing-Attacken betrifft: Für den Firefox empfiehlt das privacy-handbuch folgende...

Port80 08. Jul 2018

wasm ist bei mir um den Faktor 3 schneller. Das ist schon interessant. Die Frage ist...

nikeee13 06. Jul 2018

Kannst du mir dafür ne Quelle geben? Blogpost, Artikel oder Mailinglisten-Mails reichen...

sg (Golem.de) 06. Jul 2018

Danke für den Hinweis, ist jetzt behoben.



Aktuell auf der Startseite von Golem.de
Datenleck
Daten von 106 Millionen Thailand-Reisenden geleakt

In einer ungeschützten Datenbank fanden sich die Daten der Thailand-Reisenden aus den letzten zehn Jahren - inklusive Reisepassnummern.

Datenleck: Daten von 106 Millionen Thailand-Reisenden geleakt
Artikel
  1. Laserbeamer: Xiaomis Kurzdistanzprojektor kostet unter 1.500 Euro
    Laserbeamer
    Xiaomis Kurzdistanzprojektor kostet unter 1.500 Euro

    Der Fengmi R1 kann aus der Nähe Bilder von 50 bis 200 Zoll aufspannen und kostet relativ wenig. Dafür macht er bei der Auflösung Abstriche.

  2. Online-Shopping: Ebay Kleinanzeigen führt SMS-Verifizierung ein
    Online-Shopping
    Ebay Kleinanzeigen führt SMS-Verifizierung ein

    Wie angekündigt, beginnt Ebay Kleinanzeigen mit der Abfrage von Rufnummern. Zu Beginn ist es optional, schon bald wird es Pflicht.

  3. WLAN und 6 GHz: Was bringt Wi-Fi 6E?
    WLAN und 6 GHz
    Was bringt Wi-Fi 6E?

    Der Standard Wi-Fi 6E erweitert WLAN das erste Mal seit Jahren um ein neues Frequenzband. Das hat viele Vorteile und ein paar Nachteile.
    Von Oliver Nickel

Du willst dich mit Golem.de beruflich verändern oder weiterbilden?
Zum Stellenmarkt
Zur Akademie
Zum Coaching
  • Schnäppchen, Rabatte und Top-Angebote
    Die besten Deals des Tages
    Daily Deals • Asus 23,8" FHD 144Hz 166,90€ • PS5 bei Amazon zu gewinnen • Gaming-PC mit Ryzen 5 & RTX 3060 999€ • Corsair MP600 Pro 1TB mit Heatspreader PS5-kompatibel 162,90€ • Alternate (u. a. Asus WLAN-Adapter PCIe 24,90€) • MM-Prospekt (u. a. Asus TUF 17" i5 RTX 3050 1.099€) [Werbung]
    •  /