JavaScript JIT的显式控制?

时间:2013-04-18 15:07:01

标签: javascript standards jit

我正在研究一些代码(用于音频处理),​​这些代码在很大程度上依赖于现代JavaScript优化来提高性能。我动态生成JS方法,对Int32Arrays的内容进行一系列算术运算,我希望这些方法尽可能快地运行。 “魔术”优化工作得很好,我对如何帮助它有一些了解,但我想知道是否有办法改进它。

在我看来,如果我有某种方式告诉JavaScript引擎“这个方法将永远运行非常热,并且其参数的类型永远不会改变”,那将会很好。这样,(1)编译器可能越来越好地工作,(2)如果参数的类型错误,或者由于其他原因导致优化失败,我可以得到一个异常,而不是默默地回到解释器。

有没有人知道这种标准或举措?或者失败了,是否有分析工具来确切了解我的代码是如何优化的(在Chrome,Firefox和Safari中)?


更新

关于asm.js--我没有听说过 - 听起来很酷,并且有很多技巧可以帮助你阅读这类工作。

据我了解,asm.js本身只是编写高度可优化的JavaScript的惯例,而不是JS引擎的新规范。但是,它确实定义了一种标记符合规范的代码段的方法(通过将行"use asm";放在方法的开头),意图是未来的JS引擎将对此做出响应并使用特殊的前提 - 这些部分的时间(AOT)编译器,如果代码不符合更严格的类型安全标准等,则向控制台报告错误。

AFAICT Mozilla在AOT编译器上有started,而对于V8,Google是talking seriously。我找不到有关JavaScriptCore计划的任何内容,我也不会对IE有所了解。

但它确实回答了我的问题,我猜 - 如果我现在生成的代码可以用asm.js验证,那就没有任何缺点了,在未来的浏览器中我可能会遇到性能提升。

1 个答案:

答案 0 :(得分:1)

Chrome的V8引擎有许多用于此类调试的选项。我想你会发现这篇博文很有用:

Optimizing for V8 - Introduction

(这实际上是一系列帖子,所以如果你继续阅读,你可以进入更高级的选项。)