molily: Verschiedene JavaScript-Engines

Beitrag lesen

Hallo,

Mich würde halt brennend interessieren, wie denn überhaupt die ganzen Unterschiede technisch zu begründen sind (warum funktioniert im Firefox ein JavaScript, dass im IE nicht funktioniert?)

Das hat mit der Engine höchstwahrscheinlich nichts zu tun. Die Engine ist in erster Linie ein ECMAScript-Interpreter. Der Interpreter macht nichts anders, als ECMAScript-Code in Maschinencode zu kompilieren und diesen zu optimieren.

Auf dieser Ebene gibt es zwar einige Unterschiede, aber im Prinzip sind alle Engines ECMAScript-3-kompatibel. Aktuell ist ECMAScript 5.1. In ES5 sind einige Objektmethoden neu hinzugekommen und es gibt einen Strict Mode, aber die Browser haben das größtenteils schon implementiert.

ECMAScript ist die Sprache, die JavaScript zugrunde liegt. Sie definiert nur die sogenannten Kernobjekte (Object, Function, Array, String, Boolean, Number, Date, RegExp, Math usw.). Diese sind unabhängig von der »Implementation«. Als solche wird die konkrete Anwendung von ECMAScript bezeichnet. Denn mit ECMAScript alleine kann man wenig machen, es gibt z.B. keine Eingabe- oder Ausgabemöglichkeiten.

Interessant wird ES zusammen mit sogenannten Host-Objekten. Das sind die Objekte, die von der konkrete Anwendung bereitgestellt werden. Im Browser sind das z.B. window, document, location, das DOM und viele andere APIs.

Wenn sich in der Vergangenheit Browserunterschiede ergeben haben, dann zum großen Teil bei diesen Host-Objekten. Die Host-Objekte wiederum haben mit dem ECMAScript-Standard nichts zu tun und sind irgendwo anders definiert: Z.B. im W3C DOM Core, DOM HTML, früher in Netscape JavaScript und heute in HTML5 sowie in weiteren gesonderten Spezifikationen. Oder sie sind proprietär und daher nur bei einem Browserhersteller dokumentiert.

Warum diese Host-Objekte in den Browsern unterschiedlich umgesetzt sind, hat verschiedene historische Gründe. Erst in den letzten Jahren gab es Anstrengungen, alle vorhandenen Host-Objekte zu standardisieren, selbst die bisher proprietären. Das macht zum großen Teil die HTML5-Spezifikation. Und erst in den letzten Jahren haben sich alle Browserhersteller darauf verschrieben, Webstandards lückenlos umzusetzen, sodass erst neuere Internet Explorer wie Version 9 zehn Jahre alte Webstandards wie DOM 2 Events umsetzen.

Zudem werden auch viele neue JavaScript-APIs erfunden und die Browserhersteller sind wie immer unterschiedlicher Meinung darüber, welche sie implementieren sollten.

Übersicht über HTML5-Spezifikationen
Die W3C-Arbeitsgruppen, die an JavaScript-APIs arbeiten:
http://www.w3.org/html/wg/
http://www.w3.org/2008/webapps/wiki/PubStatus
http://www.w3.org/2009/dap/

Mathias