夏武

夏武的博客

他的个人主页  他的博客

TraceMonkey优化引擎

夏武  2009年07月02日 星期四 12:17 | 1343次浏览 | 0条评论

    浏览器的性能优化一直是业界热门的话题。虽然我们每天都在谈论这个long long ago的问题,不过怎么进行浏览器性能优化呢?
  适逢这几日,firefox 3.5发布,在3.1中可选的TraceMonkey,现在成为默认的JIT优化技术。
  TraceMonkey项目的主要目标是让javascript代码获得象本地编译的代码一样的执行速度,这点和JVM的JIT宣称的很相似。换句话说,这将会促进浏览器中javascript执行性能的大幅度提升。
  TraceMonkey项目使用了一种叫着Trace Trees的技术,该技术可以追溯到Andreas Gal和Michael Franz写的论文“Incremental Dynamic Code Generation With Trace Trees”。从原理上看,Trace Tree有以下的一些特点:
    1、同传统的控制流图相比,IR过程不需要所有节点和直接边的知识,所以不需要对程序进行静态分析。IR的构造和展开都是在解释过程中。因此速度更快。
    2、一旦trace图创建出来,每次展开的时候图被编译,当再次执行此操作的时候,执行的是已经编译好的代码。
    3、由于循环占用了大部分的程序执行时间,所以trace tree的数据结构被设计为优化程序循环服务。
    4、为了标识循环开始的位置,采用了dynamo中使用的技术。
    5、在解释过程中,如果发现了一条向后的分支,就代表在源代码中发现了一个循环。当我们发现这样的循环被执行了很多次之后,就从循环的开始位置记录整条字节码的序列,直到回到循环结束。这样的一条字节码序列就叫做一个trace,实际上是循环的一次迭代。每当我们发现了一条这样trace,就把它编译成本地代码,如果下次解释进入这个trace,就改用已经生成好的本地代码来执行。
  所以,究其本质而言,trace tree技术很好的利用了程序热点,只有频繁被执行的操作才有被JIT的必要。


TraceMonkey性能
TraceMonkey的性能评测,可以到其开发者brendan的blog上看到,下面是摘自其blog的性能评测数据:

评论

我的评论:

发表评论

请 登录 后发表评论。还没有在Zeuux哲思注册吗?现在 注册 !

暂时没有评论

Zeuux © 2024

京ICP备05028076号