Home > misc > FF 的 TraceMonkey 加速 JavaScript

FF 的 TraceMonkey 加速 JavaScript

August 23rd, 2008 :: jackyz

对不住,仍然是 JavaScript 的消息, 并不是我存心要改行播报 JavaScript 新闻,而是这条实在太重磅,不报不合适了都。

刚刚还在[上一篇]的回复中数落 FireFox 不务正业地搞什么“多脚本语言支持”,而不去专心加速 JavaScript 的运行。貌似这句话现在我就得自己吞回去了。因为 John Resig 同学博了一篇关于 FireFox v3.1 之中的 TraceMonkey 技术,加速约7倍!这一消息表明 FireFox 内部在 JavaScript 上的投资仍然保持了足够的“密度”。

TraceMonkey 基于 trace tree 理论。是一种 JIT [Just In Time] 优化技术。简单地说,JIT 就是在“合适的时候”(也就是 Just In Time 的要义)将 JavaScript 编译为 native code 再来执行(Java 很早就已经采用 JIT 来提升性能了)。而 trace tree 则对这些 native code 再做进一步的化,比如:优化函数调用,优化类型检测,优化循环,等等。据称,在多项性能测试之中,开启了这一特性之后,脚本的运行性能有了“惊人的”提升。有图为证:

TraceMonkey Boost

而,这一特性在 nightly build 的 FireFox v3.1 中已经就绪,只需下载,安装,并在 about:config 中打开选项:

  1. javascript.options.jit.content = true

即可立即开始体验。

顺便八卦一句:FireFox v3.1 的脚本引擎仍然还是 SpiderMonkey,TaceMonkey 只是 SpiderMonkey 的一个版本代号,它有很多代码都是来自于 Adobe 捐赠的 Tamarin 引擎,看来这只猴子的消化力的确很强。

另外八卦一句:打了鸡血的 SpiderMonkey 已经显著超越了 SquirrelFish 的性能。

misc

  1. August 24th, 2008 at 01:13 | #1

    对JS世界是超好的事,JS的速度将可以进一步的迈进compiled code了

  2. August 25th, 2008 at 21:26 | #2

    js性能提升大有好处。
    恩,采用js来做页面,erlang的mochiweb做本地http server,来实现交互好的应用程序很不错哦。或者air + erlang来实现?

  3. Daze
    September 16th, 2008 at 23:05 | #3

    综合的性能测试在这里:
    http://ejohn.org/blog/javascript-performance-rundown/
    各有各的特长,目前 V8 的递归性能目前还是最好的,看来 TraceMonkey、SquirrelFish 以及 V8 将会展开一场精彩的竞速厮杀。

  4. Arbow
    September 21st, 2008 at 14:37 | #4

    没事无聊在linux上面编译了v8和tracemonkey两个引擎,跑了一下language shootout上面的代码,对 fasta,100w loops

    time ../v8shell fasta.js > /dev/null

    real 0m11.572s
    user 0m11.569s
    sys 0m0.004s

    time ../js -j fasta.js > /dev/null

    real 0m17.536s
    user 0m17.397s
    sys 0m0.140s

    而 partialsums 呢,100w loops:

    time ../js -j partialsums_v8.js
    3.000000000 (2/3)^k
    1998.540145491 k^-0.5
    0.999999000 1/k(k+1)
    30.314539402 Flint Hills
    42.995233566 Cookson Hills
    14.392726723 Harmonic
    1.644933067 Riemann Zeta
    0.693146681 Alternating Harmonic
    0.785397913 Gregory

    real 0m1.078s
    user 0m1.076s
    sys 0m0.000s

    time ../v8shell partialsums_v8.js
    3.000000000 (2/3)^k
    1998.540145491 k^-0.5
    0.999999000 1/k(k+1)
    30.314539402 Flint Hills
    42.995233566 Cookson Hills
    14.392726723 Harmonic
    1.644933067 Riemann Zeta
    0.693146681 Alternating Harmonic
    0.785397913 Gregory

    real 0m2.109s
    user 0m2.100s
    sys 0m0.008s

    两者性能都各有偏重,但相比Lua来说速度还是慢了些,以后或许这些VM能达到LuaJIT的高度?拭目以待

  5. October 20th, 2010 at 14:49 | #5

    Dont part with your illusions . When they are gone you may still exist , but you have ceased to live. (Mark Twain , American writer)

  1. No trackbacks yet.