Rhino速度将得到提升

近日,JRuby专家Charles Oliver Nutter开始参与Rhino项目(JavaScript的Java实现)以提升Rhino JavaScript运行时的速度,进而实现与V8的竞争。虽然Rhino拥有可靠的实现,但在性能上却无法与其他的JavaScript运行时相提并论。Nutter认为Rhino可以通过Invokedynamic与其他优化手段扭转颓势。这可以使Rhino达到与V8相同的水准,至少也能与V8展开竞争。

InfoQ有幸采访到了Nutter以了解他与Rhino团队现在正在从事的工作。Nutter打算使用JVM的Invokedynamic将Rhino的派发机制直接连接到JVM的优化编译器上。总的来说,这么做可以降低或消除调用期方法查找、参数装箱的代价,并且可以通过内联与优化实现JavaScript对JavaScript以及JavaScript对Java的调用。Nutter说到使用invokedynamic的另一个好处在于如果使用了Java 6,那么Rhino的调用逻辑会变得更简单。

InfoQ又向Nutter问到,随着JavaScript变得越来越重要,让JVM拥有更快的JavaScript实现是不是变得很重要了。Nutter回答到:

我个人认为对JavaScript的大肆宣传有些过分了。对于浏览器来说它是一门优秀的语言,但主要原因是所有浏览器都支持它,而并不是说这门语言要比其他语言更好。

在服务器端,它变得流行的原因在于现在的运行时很不错,现有的面向客户端的众多库也适用于服务器端。

然而,考虑到最近JavaScript在端到端应用的日渐流行,那么再来一个JVM版也是自然而然的事情了。但尴尬的是最快的托管运行时——JVM——运行JavaScript的速度却无法与当前的竞争者相抗衡。我觉得是时候改变了。

最后,我们问Nutter从实现的角度来看,Rhino与JRuby相比如何。Nutter回答到:

Rhino在很多方面都是更简单的一个目标,因为它并不具备Ruby的一些特性。然而,它代表了一种有趣的挑战,因为其基于原型的对象模型无法存储方法表缓存,而Ruby则可以做到。V8所用的技术与John Rose的 “DavinciMonkey”(基于invokedynamic的Rhino的一个早期尝试)——如将生成的合成类作为原型已经进行了修改——它可以更容易地处理Rhino不固定的类型结构。

Chrome所用的V8 JavaScrip引擎与Rhino之间存在巨大的性能上的鸿沟。Nutter说诸如invokedynamic等JVM特性可以填平这个鸿沟,但Rhino需要不断改进自身的性能才行。虽然Rhino是个不错的实现,但我们还可以使用其他一些技术来提升速度,可以使用新的JVM特性如invokedynamic,也可以不使用。

现在说Rhino到底能不能与那些专门针对JavaScript的VM抗衡还为时过早,但毫无疑问,Rhino的速度将会得到极大的提升。

查看英文原文:Rhino is About to Get a Lot Faster

你可能感兴趣的:(Rhino速度将得到提升)