Wenn Sie sehen wollen, gefunden werden können, wie die verschiedenen in-Browser stapeln Javascript-Motoren, installieren Sie Safari 4 (ja, es läuft auf Windows jetzt auch!), Chrome V8, Firefox 3.5 und IE 8 (wenn Sie auf Fenster) und führen Sie den Benchmark:
http://www2.webkit.org/perf/sunspider-0.9/sunspider.html
ich glaube, wie Zipfel oben gesagt, die neuer Firefox 3.5 verwendet TraceMonkey, der auch zum Intermediate-Code unter Verwendung von f kompiliert orm von JIT. Es sollte also etwas günstiger mit V8 verglichen werden. Zumindest wird es nicht 10x langsamer als V8 wie Firefox 3 SpiderMonkey (ohne JIT) war.
Für mich ... Safari 4.0.3 war 2.5x schneller als Tracemonky in Firefox 3.5.3 auf Win XP. IE8 war viel viel langsamer. Ich habe im Moment kein Chrome installiert.
Ich weiß nicht, über Rhino Kompilierung zu Java-Bytecode. Wenn es immer noch die dynamischen Eigenschaften von Javascript interpretiert, wie zum Beispiel das Hinzufügen von Attributen zu Objektinstanzen zur Laufzeit (Beispiel obj.someNewAttribute = "someValue", was in Javascript erlaubt ist) ...Ich bin nicht so sicher, dass es vollständig in Bytecode "kompiliert" wird, und Sie können möglicherweise keine bessere Leistung erzielen, als dass Sie nicht jedes Mal, wenn Javascript ausgeführt wird, aus dem JavaScript-Quelltext kompilieren müssen. Denken Sie daran, dass Javascript eine sehr dynamische Syntax wie eval ("x = 10; y = 20; z = x * y") erlaubt; Das bedeutet, dass Sie Codefolgen erstellen können, die zur Laufzeit kompiliert werden. Deshalb würde ich denken, dass Rhino im gemischten Modus interpretiert/kompiliert wird, selbst wenn Sie nach JVM-Bytecode kompiliert haben.
Die JVM ist immer noch ein Interpreter, wenn auch ein sehr guter mit JIT-Unterstützung. Daher denke ich an Rhino-on-JVM als 2 Interpreter-Layer (Interpreter-on-Interpreter) oder Interpreter^2. Während die meisten anderen Javascript-Engines in C geschrieben sind, sollten sie eher wie Interpreter^1 funktionieren. Jede Interpreterschicht kann eine 5- bis 10-fache Leistungsverschlechterung im Vergleich zu C oder C++ (z. B. Perl oder Python oder Ruby) hinzufügen, aber mit JIT kann der Leistungseinbruch viel niedriger in der Größenordnung von 2-4x sein. Und die JVM hat eine der robustesten & ausgereiften JIT-Motoren aller Zeiten.
So wird Ihre Laufleistung definitiv variieren und Sie würden wahrscheinlich davon profitieren, einige ernsthafte Benchmarks zu machen, wenn Sie eine echte Antwort für Ihre beabsichtigte Anwendung auf Ihrer eigenen Hardware haben wollen & OS.
Rhino kann nicht zu schrecklich langsam sein, da ich weiß, dass viele Leute es verwenden. Ich denke, es ist nicht die Geschwindigkeit, sondern die Tatsache, dass es einfach zu codieren/leicht/embeddable/Interpreter ist, die Haken in Java-Bibliotheken, die es perfekt für Scripting/Konfiguration/Erweiterbarkeit Ihres Software-Projekts macht. Einige Texteditoren wie UltraEdit integrieren Javascript sogar als alternative Makro-Skript-Engine. Jeder Programmierer scheint in der Lage zu sein, ziemlich einfach durch Javascript zu stolpern, so dass es auch leicht zu erlernen ist.
Ein Vorteil von Rhino ist, dass es praktisch überall läuft, wo die JVM läuft. Meiner Erfahrung nach kann der Versuch, eigenständig TraceMonkey oder SpiderMonkey zum Erstellen von & über die Befehlszeile auszuführen, auf Systemen wie Windows ein wenig schmerzhaft sein. Und das Einbetten in Ihre eigene Anwendung kann noch zeitaufwendiger sein. Aber die Amortisation einer einbettbaren Sprache würde sich für ein großes Projekt lohnen, verglichen mit der Notwendigkeit, eine eigene Mini-Scripting-Lösung zu erstellen, wenn es das ist, wonach Sie suchen.
Scripting mit Rhino ist wirklich einfach, wenn Sie Java und das Nashorn jar, die Sie gerade Ihr Javascript schreiben und es von der Kommandozeile ausgeführt werden. Ich benutze es die ganze Zeit für einfache Aufgaben.
Rhino kann zu Java-Bytecode kompilieren. https://developer.mozilla.org/en/Rhino_JavaScript_Compiler – Thilo