我有牧群V8编译“热代码”优化javascript性能。有什么方法可以告诉我已经编译了哪些代码,哪些代码没有呢?
发布于 2016-01-17 01:08:03
首先,您需要在Chrome的Javascript控制台的Profiles选项卡中分析您的代码,以确定什么是值得测试的。如果一个函数、模块或您想要测试的任何东西不需要花费太多时间,那么您的努力就不值得了。
V8的JIT将对您的代码进行假设,如果这些假设是正确的,代码将是闪电般的快。如果没有,V8将在您的程序继续运行时对该代码进行优化。举个例子,这是我自己测试的一个。在下面的代码中,我正在测试我编写的合并排序函数。
console.time('order');
msort(ob);
console.timeEnd('order');60000个随机数的第一次运行在8ms之后完成,接下来的所有跳到大约16 8ms。基本上,JIT与我编写的东西有问题,所以它重新编译了我的代码。我已经看到了完全相反的情况,代码跳到两倍的速度。如果您想查看它,这不是确切的版本,而是使用es6模块语法。https://github.com/jamesrhaley/es2015-babel-gulp-jasmine/blob/master/src/js/mergeSort/mergeSort.js
另外,如果您的代码不值得优化,那么从一开始就不会对其进行优化。这里有几个链接帮助我在编写js时提高了速度。
发布于 2016-01-17 06:19:05
如果您愿意构建一个独立版本的v8,您可以按以下方式运行shell:d8 --trace-opt foo.js (您还可能希望部署--trace-deopt,因为您的代码可能会被去优化(然后再重新优化))。
另一个有用的选项是--print-code,它将使您看到所有已编译函数的所有版本的机器代码,尽管这一版本可能是过分的。还有--print-opt-code。
最后,使用d8 --help查看v8还可以采取哪些其他有用的选项。
https://stackoverflow.com/questions/34833179
复制相似问题