JavaScript JIT的显式控制?
我正在编写一些代码(用于音频处理),这些代码在很大程度上依赖于现代JavaScript性能优化。我动态生成JS方法,对Int32Array的内容执行一系列算法,我希望这些方法尽可能快地运行。“神奇”的优化效果非常好,我对如何帮助它有一些想法,但我想知道是否有办法改进它 我突然想到,如果我有办法告诉JavaScript引擎“这个方法总是运行得非常热,它的参数类型永远不会改变”,那就太好了。这样,(1)编译器可能更快更好地工作,(2)如果参数类型错误,或者优化由于其他原因失败,我可以得到一个异常,而不是默默地返回到解释器 有人知道这类标准或倡议吗?或者如果做不到这一点,是否有评测工具可以准确地查看我的代码是如何优化的(在Chrome、Firefox和Safari中)JavaScript JIT的显式控制?,javascript,standards,jit,Javascript,Standards,Jit,我正在编写一些代码(用于音频处理),这些代码在很大程度上依赖于现代JavaScript性能优化。我动态生成JS方法,对Int32Array的内容执行一系列算法,我希望这些方法尽可能快地运行。“神奇”的优化效果非常好,我对如何帮助它有一些想法,但我想知道是否有办法改进它 我突然想到,如果我有办法告诉JavaScript引擎“这个方法总是运行得非常热,它的参数类型永远不会改变”,那就太好了。这样,(1)编译器可能更快更好地工作,(2)如果参数类型错误,或者优化由于其他原因失败,我可以得到一个异常,而
更新 关于asm.js--我没听说过--它听起来很酷,而且它有很多技巧,对于这类工作非常有用 据我所知,asm.js本身只是编写高度优化的JavaScript的约定,而不是js引擎的新规范。但是,它确实定义了一种方法来标记代码的兼容部分(通过在方法的开头添加一行
“use asm”
),目的是未来的JS引擎将对此做出响应,并在这些部分上使用特殊的提前(AOT)编译器,如果代码不符合有关类型安全等更严格的标准,则向控制台报告错误
AFAICT Mozilla有一个AOT编译器,谷歌也在为V8开发。我找不到任何关于JavaScriptCore的计划,对于IE我也不会屏息以待
但我想,它确实回答了我的问题——如果我现在生成用asm.js进行验证的代码,这没有什么坏处,而且在未来的浏览器中,我可能会得到性能提升。Chrome的V8引擎有很多用于这种调试的选项。我想你会发现这篇博文很有用:
(这实际上是一系列文章,如果你继续阅读,你可以进入更高级的选项。)相关吗?听起来确实有用。我的项目变得相当庞大,甚至除了音频处理代码,所以我想我会花一些时间来掌握这个分析器。。。