自从TraceMonkey被集成到Firefox 3.1 alpha版,并在mozilla-central提供下载以后,我们最近就一直很忙,主要时间用来提升稳定性,但在性能方面也还是取得了一些成绩。今天的版本修复了一个重复调用(iloop)SunSpider测试的Bug(我郑重向那些深受其害的朋友们道歉)。
我猜想大家都很关心的是:TraceMonkey与V8相比,孰优孰劣呢?
这里就有一份测试结果,可以从一个方面比较两个引擎。我们选用了两个平台,一个是运行在Mac Mini上的Windows XP,另外一个是运行在MacBook Pro上的Windows Vista。都使用SunSpider做同样的测试,测试的版本就选择昨天晚上的Firefox测试版和昨天的Chrome测试版。最后得出的结果如下:

我们分别以1.28x和1.19x胜出。也许我们应该把TraceMonkey叫做“V10” ;-)
好吧,这只是使用SunSpider,一个流行但不具有代表性的测试工具得出的结论而已。我们可不想用它来自夸。(“不要随便自夸”可是我们在Mozilla的座右铭哟)
但这个数据确实值得我们深究一下,让我们看看具体的测试速率:

TraceMonkey在bit-banging、字符串和正则表达式方面的成绩要高于V8,在SunSpider微型测试的成绩平均要快出4倍左右。
这个图表同样说明V8在几个重度递归(recursion-heavy)测试中把TraceMonkey击败得体无完肤。我们现在已经制定出追踪递归的计划(而不是仅仅的跟踪而已)。但考虑到我们每天的工作已经够多了,知道说只肯定是下一步的工作目标,但可能不是现在来做。
这倒提醒了我,TraceMonkey仅仅开发了几个月,除了Adobe的Tamarin Tracing贡献的Nanojit技术(再次感谢ed和他的团队付出的努力)以外,我们已经创建并不断增强了对x86-64的支持并修复了很多缺陷。我们尝试了所有的途径来开发TraceMonkey,而且在SunSpider的数据上我们已经可以和V8并驾齐驱了。
这项工作绝对很重要。随着我们追踪工作的继续,TraceMonkey只可能会越来越快。当我们对递归、智能追踪寄存器分配(trace-wise register allocation)以及其他方面做了优化以后,我们完全可以消除上面图表中处于劣势的项目,并全面提升加速率,甚至有可能达到2或者更高。
我将会在博客上持续更新工作进度,欢迎大家留下你们的意见。
V8是一个非常棒的JavaScript引擎,而且有很大的空间提速。(但Chrome看起来更棒,尤其是他的多进程架构设计的很明智)
大家要意识到,这场竞争不是一场漫长的季后赛,每个参与竞争的虚拟机都可能被一次突发的炒作事件灭亡。我们坚信Franz和Gal风格的追踪技术(Franz&Gal-style tracing)还有更多的潜力可以挖掘,比如基于内建的隐式类型,在运行时把变量编译成常量、消除死代码等方面。我想在随后的几周这些潜力就会被证实。
不管怎样,我们现在做的很好并在不断跟进,“任何说我们就要灭亡的言论都是夸大其词”,更多的精彩还在后面。



