2

我正在编写一些代码(用于音频处理),​​这些代码严重依赖现代 JavaScript 优化来提高性能。我动态生成 JS 方法来对 Int32Arrays 的内容进行一系列算术运算,并且我希望这些方法尽可能快地运行。“魔术”优化效果很好,我知道如何帮助它,但我想知道是否有改进的方法。

我突然想到,如果我有办法告诉 JavaScript 引擎“这个方法总是会运行得很热,并且它的参数类型永远不会改变”,那就太好了。这样,(1)编译器可能会更快更好地工作,并且(2)如果参数的类型错误,或者由于其他原因优化失败,我可以获得异常而不是默默地退回到解释器。

有谁知道这种标准或倡议?或者如果做不到这一点,是否有分析工具可以准确地查看我的代码是如何优化的(在 Chrome、Firefox 和 Safari 中)?


更新

关于 asm.js——我没听说过——这听起来很酷,而且它有很多对这类工作有用的技巧。

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

AFAICT Mozilla 已经开始使用 AOT 编译器,Google 正在认真讨论 V8 的问题。我找不到关于 JavaScriptCore 计划的任何信息,我也不会屏住呼吸来讨论 IE。

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

4

1 回答 1

1

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

针对 V8 进行优化 - 简介

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

于 2013-04-18T15:15:40.440 回答