Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/google-chrome/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
chrome javascript优化深层魔法_Javascript_Google Chrome_Optimization_Compiler Construction_V8 - Fatal编程技术网

chrome javascript优化深层魔法

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编译器

我正在为chrome优化javascript中的sha-256>hmac>pbkdf2加密算法

如果我更改一行(在注释
//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无法正确解析类型的原因。

一个简明易读的答案中包含了大量信息。。。这是明确的,可操作的,比我希望的要好得多,谢谢!