为什么在Chrome 57中内联Javascript比在控制台中慢10倍?

时间:2017-11-18 15:53:52

标签: javascript performance google-chrome console.log

使用Debian 8,标准存储库中提供的最新版Chrome(Chromium)为57.我一直在做一些非常简单的速度测试并获得奇怪的结果。

当我在控制台中运行以下单行程序时,它会在大约1秒内完成:

var a = 0;for (var i = 0; i < 10000000; i++) {a = Math.sqrt(33 * Math.random());}console.log(a);

但是如果我创建一个包含相同代码的onclick处理程序的按钮,则执行时间超过15秒:

<button onclick="var a = 0;for (var i = 0; i < 10000000; i++) {a = Math.sqrt(33 * Math.random());}console.log(a);">Test</button>

有人可以解释为什么会这样吗?

修改

如果我将代码分离到脚本标记中的函数中,并在按钮onclick处理程序中引用该函数,它的工作速度与在控制台中一样快,实际上要快一点。

1 个答案:

答案 0 :(得分:1)

特别是V8将其性能提升集中在&#34;每天的代码&#34;,因此他们采用了一些流行的网页,并尝试尽可能快地加载它们。这意味着:如果你的行为像人群你的代码将快速运行,如果你做一些特殊的东西(如内联js)它会运行缓慢,因为没有人把精力投入到优化中,因为它不值得。

更多信息可以在V8 GitHub wiki上找到(虽然已过期),而他们的benchmarks README则专门提到了50个经过测试的热门网页。