chrome javascript优化深层魔法
我正在为chrome优化javascript中的sha-256>hmac>pbkdf2加密算法 如果我更改一行(在注释chrome javascript优化深层魔法,javascript,google-chrome,optimization,compiler-construction,v8,Javascript,Google Chrome,Optimization,Compiler Construction,V8,我正在为chrome优化javascript中的sha-256>hmac>pbkdf2加密算法 如果我更改一行(在注释//BREADCRUMB之后)ei=(di+t1)>>0至ei=(di+t1)我的测试仍然通过,但是测试运行时从>>0跳到告诉chrome它应该将该值存储为(实际)整数。。。但它也有某种程度的“货物崇拜” 我的问题是:“这在任何地方都有文档记录吗?”我想验证一下这是如何工作的,或者找到一种零操作的方式来告诉chrome关于ints的信息(以及任何其他预测chrome js编译器
//BREADCRUMB
之后)ei=(di+t1)>>0代码>至ei=(di+t1)代码>我的测试仍然通过,但是测试运行时从>>0跳到告诉chrome它应该将该值存储为(实际)整数。。。但它也有某种程度的“货物崇拜”
我的问题是:“这在任何地方都有文档记录吗?”我想验证一下这是如何工作的,或者找到一种零操作的方式来告诉chrome关于ints的信息(以及任何其他预测chrome js编译器的秘密方式,这样的文档会泄露出来)
谢谢大家! 一般原则是,是的,Chrome/V8会尝试找出您的代码是否始终处理特定类型(如ints),并针对这种情况进行优化。网上有很多关于Javascript JIT策略的帖子和演示。。。e、 g.和
不过,在这个特定的例子中,我猜这是一个bug。首先,我无法在node.js中复制它。此外,将(di+t1)>>0
替换为其他常见的int-casting“类型提示”,如(di+t1)|0
和~(di+t1)
,似乎并不能改善Chrome的性能。最后,运行带有--js flags=“--trace opt--trace deopt--code comments”
的Chrome显示,在缓慢的情况下,\u hashWords
会经过几十次的去优化和重新优化,这可能会使它比根本没有进行优化时更慢。(我猜这是CPU的颠簸等价物。)有趣的是,取消优化的原因是shift-I
,这听起来好像编译器一直假设数字不是整数,然后每次遇到整数移位指令时都会感到惊讶
为了回答您的具体问题,Chrome编译东西的确切方式没有文档记录,但是分析和调试性能问题的一般原则和方法有文档记录。我最喜欢的关于评测的一系列文章——是由一个从事Dart-to-JS编译器工作的人写的
编辑:Doh,我刚刚意识到>>0
正在转换为无符号int,而|0
和~
转换为有符号int。这可能就是Chrome的V8无法正确解析类型的原因。一个简明易读的答案中包含了大量信息。。。这是明确的,可操作的,比我希望的要好得多,谢谢!