如果您想了解各种浏览器内 Javascript 引擎的组合方式,请安装 Safari 4(是的,它现在也可以在 Windows 上运行!)、Chrome V8、Firefox 3.5 和 IE 8(如果您在 Windows 上)和运行基准测试:
http://www2.webkit.org/perf/sunspider-0.9/sunspider.html
我相信正如 Pointy 上面所说的,新的 Firefox 3.5 使用 TraceMonkey,它还可以使用某种形式的 JIT 即时编译成中间编辑代码。所以它应该与 V8 相比略胜一筹。至少它不会像 Firefox 3 SpiderMonkey(没有 JIT)那样比 V8 慢 10 倍。
对我来说...safari 4.0.3 在 Win XP 上的 Firefox 3.5.3 中比 Tracemonky 快 2.5 倍。 IE8 要慢得多。我目前没有安装 Chrome。
不知道 Rhino 编译成 java 字节码。如果它仍在解释 Javascript 的动态特性,例如能够在运行时向对象实例添加属性(例如 obj.someNewAttribute="someValue" Javascript 中允许的)......我不太确定它是否完全“编译” " 到字节码,除了每次运行 Javascript 时不必从 Javascript 源代码文本编译之外,您可能不会获得任何更好的性能。请记住,Javascript 允许非常动态的语法,例如 eval("x=10;y=20;z=x*y");这意味着您可以构建在运行时编译的代码字符串。这就是为什么我认为即使你编译为 JVM 字节码,Rhino 也会被混合模式解释/编译。
JVM 仍然是一个解释器,尽管它支持 JIT 非常好。所以我喜欢将 Rhino-on-JVM 视为 2 个解释器层(interpreter-on-interpreter)或解释器^2。而您的大多数其他 Javascript 引擎都是用 C 编写的,因此应该更像解释器^1。与 C 或 C++(例如,参考 Perl 或 Python 或 Ruby)相比,每个解释器层可以增加 5-10 倍的性能下降,但使用 JIT,性能损失可能会低得多,大约为 2-4 倍。 JVM 拥有有史以来最强大和最成熟的 JIT 引擎之一。
因此,如果您想在自己的硬件和操作系统上为您的预期应用程序提供真正的答案,您可能会受益于做一些严肃的基准测试。
Rhino 不能太慢,因为我知道很多人都在使用它。我认为它的主要吸引力不是它的速度,而是易于编码/轻量级/可嵌入/解释器的事实,它与 Java 库挂钩,这使得它非常适合您的软件项目的脚本/配置/可扩展性。 UltraEdit 等一些文本编辑器甚至嵌入了 Javascript 作为替代宏脚本引擎。每个程序员似乎都能轻松地学习 javascript,因此也很容易上手。
Rhino 的一个优势是它几乎可以在 JVM 运行的任何地方运行。以我的经验,尝试让独立的 TraceMonkey 或 SpiderMonkey 从命令行构建和运行在 Windows 等系统上可能会有点痛苦。并且嵌入到您自己的应用程序中可能会更加耗时。但是对于一个大型项目来说,拥有一种可嵌入语言的回报是值得的,而不是如果你想要这样做,就必须“推出你自己的”迷你脚本解决方案。
如果你有 Java 和 rhino jar,用 Rhino 编写脚本真的很容易,你只需编写你的 javascript 并从命令行运行它。我一直用它来完成简单的任务。