15

到目前为止,大多数主流浏览器已经开始将优化 JIT 编译器集成到他们的 JavaScript 解释器/虚拟机中。这对每个人都有好处。现在,我很难确切知道它们执行了哪些优化以及如何最好地利用它们。每个主要 JavaScript 引擎的优化参考有哪些?

背景:

我正在开发一个编译器,它可以从更高级和更安全的语言生成 JavaScript(无耻的插件:它被称为OPA,它非常酷),并且考虑到我正在生成的应用程序的大小,我希望我的 JavaScript 代码能够尽可能快并尽可能节省内存。我可以处理高级优化,但我需要更多地了解执行了哪些运行时转换,以便了解哪些低级代码会产生最佳结果。

一个例子,我想到的:我正在编译的语言将很快集成对惰性的支持。JIT 引擎在惰性函数定义中表现良好吗?

4

2 回答 2

16

本系列文章讨论 V8 的优化。总之:

在这种情况下,前两点可能对您没有太大帮助。第三个可能显示出将事物缓存在一起的洞察力。最后一个可能会帮助您创建具有相同属性的对象,以便它们使用相同的隐藏类。

这篇博文讨论了 SquirrelFish Extreme 的一些优化:

  • 字节码优化
  • 多态内联缓存(如 V8)
  • Context threaded JIT(原生机器码生成的介绍,如V8)
  • 正则表达式 JIT

TraceMonkey 通过跟踪进行了优化。我对此了解不多,但它看起来像是在一些“热代码”(代码经常在循环中运行)中检测到变量的类型,并根据该变量的类型创建优化的代码。如果变量的类型发生变化,它必须重新编译代码——基于此,我想说你应该远离在循环中改变变量的类型。

于 2010-01-13T10:46:24.800 回答
1

我发现了一个额外的资源:

于 2011-06-09T07:03:45.257 回答