我如何知道在运行 V8 时编译了什么 JavaScript
How can I tell what javascript has been compiled when running V8
我有一群 V8 编译"热代码"优化 JavaScript 性能。有什么方法可以告诉我哪些代码已经编译,哪些代码没有编译?
首先,您需要在Chrome中Javascript控制台的"配置文件"选项卡中分析代码,以查看值得测试的内容。 如果您尝试测试的函数、模块或任何内容不占用太多时间,则不值得您付出努力。
V8 的 JIT 将对你的代码做出假设,如果这些假设是正确的,代码将是闪电般的快。 如果不是,V8 将随着程序的继续而取消优化该代码。 这是一个例子,来自我自己的测试。 在下面的代码中,我正在测试我编写的合并排序函数。
console.time('order');
msort(ob);
console.timeEnd('order');
60000 个随机数的第一次运行在 8 毫秒后完成,以下所有内容都跳到 16 毫秒左右。 基本上,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
如果你愿意构建一个独立的 v8 版本,你可以按如下方式运行 shell: d8 --trace-opt foo.js
(您可能还想部署--trace-deopt
,因为您的代码可能会被取消优化(然后再次重新优化)。
另一个有用的选项是--print-code
,它可以让您查看所有已编译函数的机器代码的所有版本,尽管这可能是矫枉过正。还有--print-opt-code
。
最后,使用 d8 --help
看看 v8 可以采取哪些其他有用的选项。
- 这是什么 ==- javascript 运算符
- 我的单元测试选项是什么
- 全局变量和全局对象的属性之间有什么区别吗
- 打破承诺链的好方法是什么
- 在AngularJS应用程序中使用封装指令和路由的推荐方式是什么
- Javascript中的空白是什么
- 将dart编译为javascript的限制是什么
- 将非类型化数组编译为 C 的有效方法是什么?
- 将类似JavaScript的结构编译为静态,快速C++的最佳方法是什么?
- 这些缓存.js和编译映射文件是什么
- 我如何知道在运行 V8 时编译了什么 JavaScript
- typescript编译到什么版本的javascript
- 编译后的jst模板中的this是什么
- 检查和编译之间的区别是什么?
- 在编译完文件中的所有CSS和另一个文件中的JS之后,接下来的步骤是什么?
- 什么时候(编译/运行时)一个依赖的节点模块被链接到项目时,它是require()'
- 用ES6编写和编译到ES5对最终用户有什么好处?
- javascript事件监听器在汇编语言中编译成什么?
- 究竟什么是 JavaScript 编译指示
- 链接、控制器和编译函数中的各种注入物是什么