Neuer Baseline-Compiler soll Ionmonkey ergänzen.
Neuer Baseline-Compiler soll Ionmonkey ergänzen. (Bild: Mozilla)

Javascript Neuer Baseline-Compiler soll Firefox beschleunigen

Firefox erhält einen neuen Baseline-Compiler, der Jägermonkey ersetzen und die Ausführung von Javascript in Firefox weiter beschleunigen soll. Die aktuellen Nightly-Builds von Firefox enthalten den neuen Baseline-Compiler bereits.

Anzeige

Mit einem neuen Baseline-Compiler, der speziell für Ionmonkey entwickelt wurde, will Mozilla Jägermonkey ersetzen. Die Verarbeitung von Javascript in Firefox verläuft in mehreren Stufen: In der ersten verarbeitet ein Interpreter den Javascript-Code und sammelt dabei alle Typinformationen. Sollten bestimmte Javascript-Funktionen häufig verwendet werden, kommt der JIT-Compiler Jägermonkey zum Einsatz. Dieser arbeitet zwar sehr schnell, erzeugt aber ausführbaren Code, ohne diesen nennenswert zu optimieren.

Sehr häufig verwendete Funktionen werden daher nochmals mit einem zweiten JIT-Compiler, Ionmonkey, übersetzt. Ionmonkey arbeitet zwar langsamer als Jägermonkey, erzeugt dank diverser Optimierungen aber schnelleren Code. Damit das insgesamt zu einer möglichst schnellen Javascript-Engine führt, bedarf es der richtigen Balance zwischen den unterschiedlichen Stufen.

Letztendlich wird Jägermonkey in diesem Konstrukt als Baseline-Compiler für Ionmonkey verwendet, wurde dafür aber nie entwickelt. Die Mozilla-Entwickler versprechen sich daher große Vorteile von dem neuen Baseline-Compiler, der für Ionmonkey entwickelt wurde.

Sowohl Jägermonkey als auch Ionmonkey verwenden die vom Interpreter erzeugten Typeninformationen. Ändert sich aber der Typ einer Variablen während der Laufzeit, wirft Firefox den von Jägermonkey und Ionmonkey erzeugten JIT-Code weg und führt die Funktion erneut im Interpreter aus. Der JIT-Lebenszyklus beginnt von vorn: Wird die Funktion häufiger aufgerufen, kommt Jägermonkey zum Einsatz, bei sehr häufiger Nutzung greift Ionmonkey ein.

Kein ideales Gespann

Der Ansatz hat allerdings einige Probleme: Weder Jägermonkey noch Ionmonkey sammeln Typeninformationen und die vom Interpreter gesammelten sind sehr begrenzt. Das wurde zwar durch die in Firefox mittlerweile integrierte Type-Inference-Infrastruktur verbessert, funktioniert aber nicht in allen Fällen gut, was die von Ionmonkey durchgeführten Optimierungen einschränkt. Zudem verwendet Jägermonkey den vom Interpreter erzeugten Heap-Stack direkt, während Ionmonkey den deutlich schnelleren C-Stack verwendet, was die Kommunikation zwischen Jägermonkey und Ionmonkey sehr langsam macht.

Hinzu kommt, dass große Teile des im Web verwendeten Javascript-Codes nicht häufig genug ausgeführt werden, damit Jägermonkey überhaupt zum Einsatz kommt. Denn Jägermonkey ist zwar deutlich schneller als Ionmonkey, aber noch immer recht komplex und langsam. Das schlägt sich beispielsweise im Benchmark Spidermonkey nieder.

Neuer Baseline-Compiler soll Abhilfe schaffen

Der kürzlich in die Entwicklerversionen von Firefox integrierte neue Baseline-Compiler soll die Situation verbessern: Er versorgt die Type-Inference-Infrastruktur ebenso wie der Interpreter mit Typeninformationen, sammelt aber über Inline-Cache-Chains deutlich mehr Informationen, die Ionmonkey auswerten kann. Der von Baseline erzeugte Code kann zudem nie ungültig werden, denn er reagiert auf dynamische Typenveränderungen. Der Code muss also niemals erneut übersetzt werden. Trotzdem kann der von Baseline erzeugte Code 10- bis 100-mal schneller ausgeführt werden als mit dem Interpreter. Der Baseline-Compiler verwendet zudem ebenso wie Ionmonkey den C-Stack, was den Informationsaustausch mit Ionmonkey beschleunigt.

Hinzu kommt: Der Baseline-Compiler ist deutlich einfacher als Jägermonkey oder Ionmonkey, teilt sich aber große Teile seines Codes - Assembler, Jotcode-Container, Linker - mit Ionmonkey. Dadurch stellt der neue Baseline-Compiler einen besseren Kompromiss zwischen Interpreter und JIT dar.

Schneller und effizienter

All das soll bei der Ausführung von Javascript deutliche Vorteile gegenüber dem bisher verwendeten System bieten: So wird Firefox in den Benchmarks Kraken, Sunspider und Octane rund 5 bis 10 Prozent schneller. Zugleich wird für Type-Inference weniger Speicher benötigt und es gibt neue Möglichkeiten für die weitergehende Code-Optimierung in Ionmonkey. Auch soll die weitere Integration von Ionmonkey und Baseline in der nächsten Zeit für weitere Geschwindigkeitssteigerungen sorgen.

Details zum neuen Baseline-Compiler erläutert Kannan Vijayan in einem Blogeintrag. Er hat den Baseline-Compiler zusammen mit Jan De Mooij, Tom Schuster und Brian Hackett entwickelt.


Paykz0r 09. Apr 2013

das stimmt zwar aber 3d css bsw. ist unter firefox komplett voll mit bugs. da kann man...

Schnarchnase 09. Apr 2013

Welche Engine meinst du? Gecko ist flott, je nach Version sogar schneller als Webkit.

Kaiser Ming 08. Apr 2013

optimalerweise mit ner js Funktion, falls gibt , weil die kann der Compiler am...

Kaiser Ming 08. Apr 2013

ist mir eigentlich peng, hauptsache schneller hoffe es setzen sich Dank asm.js doch noch...

Anonymer Nutzer 08. Apr 2013

Ist seit einigen Tagen so ... hatte noch keine Zeit mich damit zu beschäftigen :/

Kommentieren



Anzeige

  1. Entwicklungsingenieur (m/w) Software für den Bereich Firmware Smart-TV-Anwendung
    Metz Consumer Electronics GmbH, Zirndorf Raum Nürnberg
  2. (Fach-)Informatiker (m/w)
    DR. JOHANNES HEIDENHAIN GmbH, Traunreut
  3. (Junior) PHP- / Webentwickler (m/w)
    über ACADEMIC WORK, München
  4. Junior Systems Administrator (m/w)
    ANSYS Germany GmbH, Otterfing (bei München)

Detailsuche


Top-Angebote
  1. TIPP: 4 Blu-rays für 30 EUR
    (u. a. Interstellar, Grand Budapest Hotel, Teenage Mutant Ninja Turtles, Django Unchained, Edge of...
  2. NUR HEUTE: Google Chromecast HDMI Streaming Media Player
    19,00€ inkl. Versand
  3. TIPP: Kingsman - The Secret Service [Blu-ray]
    11,99€

Weitere Angebote


Folgen Sie uns
       


  1. Mediapad M2 8.0

    Huaweis neues 8-Zoll-Tablet im Metallgehäuse

  2. Mad Max im Test

    Sandbox voll mit schönem Schrott

  3. 2,5-Zoll-HDD

    Seagate erhöht Speicherdichte auf 1 TByte pro Platter

  4. Retropie 3 angetestet

    Unkompliziertes Retro-Daddeln auf dem Raspberry Pi

  5. Dreadnought 2050

    Das Kampfschiff der Zukunft fährt mit Fusionsenergie

  6. Gehacktes Babyfon

    Das Kind schreit, und die Welt hört mit

  7. Panasonic Viera TX-65CW954/CZ950

    Weg vom Plasma, hin zum OLED-Panel

  8. Asus Zen All-in-One

    4K, Maxwell-Grafik, PCIe-SSD, Realsense, Skylake, Win10

  9. Owncloud

    "Warum sollte uns jemand trauen?"

  10. X Rebirth

    Egosoft arbeitet an neuem Weltraumspiel



Haben wir etwas übersehen?

E-Mail an news@golem.de



Ideapad Miix 700 im Hands On: Lenovo baut ein Surface
Ideapad Miix 700 im Hands On
Lenovo baut ein Surface
  1. Asus GX700 Übertakter-Notebook läuft mit WaKü und geheimer Nvidia-GPU
  2. Smartwatch Huawei Watch kostet so viel wie Apple Watch
  3. Notebooks mit neuem Intel-Prozessor Mit Skylake kommt meist USB-Typ-C

Primove in der Hauptstadt: Berlin hat wieder eine E-Bus-Linie
Primove in der Hauptstadt
Berlin hat wieder eine E-Bus-Linie
  1. Berliner Verkehrsbetriebe Update legt elektronischen Echtzeit-Fahrplan tagelang lahm
  2. Bombardier Primove Eine E-Busfahrt, die ist lustig
  3. Bombardier Primove Erste Tests mit Induktionsbussen in Berlin

Digiskopie ausprobiert: Ich schau dir in die Augen, Wildes!
Digiskopie ausprobiert
Ich schau dir in die Augen, Wildes!
  1. Modulo Neue Kamera belichtet nie über
  2. Obstruction-Free Photography Algorithmus entfernt störende Elemente aus Fotos
  3. Flir One Hochauflösende Wärmebildkamera für iOS und Android

  1. Re: Jean Luc Picard?

    JürgenOfner | 14:50

  2. Re: Das ist nicht Wikipedias einziges Problem

    Trollversteher | 14:50

  3. Re: sollte das Modell dann nicht eher..

    Dwalinn | 14:49

  4. Re: Warum gebogen?

    motzerator | 14:49

  5. Re: und wozu brauche ich ein bild?

    MESH | 14:49


  1. 14:22

  2. 14:00

  3. 12:40

  4. 12:05

  5. 12:03

  6. 11:43

  7. 11:07

  8. 11:00


  1. Themen
  2. A
  3. B
  4. C
  5. D
  6. E
  7. F
  8. G
  9. H
  10. I
  11. J
  12. K
  13. L
  14. M
  15. N
  16. O
  17. P
  18. Q
  19. R
  20. S
  21. T
  22. U
  23. V
  24. W
  25. X
  26. Y
  27. Z
  28. #
 
    •  / 
    Zum Artikel