如何判断运行V8时编译的是什么javascript

时间:2016-01-16 23:09:23

标签: javascript google-chrome v8

我有群V8编译“热门代码”优化javascript性能。有什么方法可以告诉我们编写了哪些代码,哪些代码没有?

2 个答案:

答案 0 :(得分:1)

首先,您需要在Chrome的Javascript控制台的“配置文件”标签中分析您的代码,以了解值得测试的内容。如果您尝试测试的功能,模块或其他任何内容都不会占用太多时间,那么您的工作就不值得。

V8的JIT将对您的代码做出假设,如果这些假设为真,则代码将快速闪存。如果不是,V8将在您的程序继续时取消优化该代码。这是我自己的测试中的例子。在下面的代码中,我正在测试我编写的合并排序函数。

console.time('order');
msort(ob);
console.timeEnd('order');

首次运行的60000个随机数在8ms后完成,以下所有数据都会跳至16ms左右。基本上JIT与我写的东西有问题所以它重新编译了我的代码。我已经看到完全相反的情况发生在代码跳转到两倍的速度。如果你想看一下,这不是确切的版本,而是一个使用es6模块语法的版本。 https://github.com/jamesrhaley/es2015-babel-gulp-jasmine/blob/master/src/js/mergeSort/mergeSort.js

此外,如果您的代码不值得优化,那么它将不会优化。这里有几个链接帮助我提高了写js时的速度。

https://www.youtube.com/watch?v=UJPdhx5zTaw

https://www.smashingmagazine.com/2012/11/writing-fast-memory-efficient-javascript/#so-how-does-javascript-work-in-v8

答案 1 :(得分:0)

如果您愿意构建独立版本的v8,则可以按如下方式运行shell:d8 --trace-opt foo.js(您可能还需要部署--trace-deopt,因为您的代码可能会被取消优化(以及然后再次重新优化..))。

另一个有用的选项是--print-code,它可以让你看到编译过的所有函数的机器代码的所有版本,尽管这可能是一个过度杀伤。还有--print-opt-code

最后使用d8 --help来查看v8可以采用的其他有用选项。