首页 > 解决方案 > 为什么 Node.js 的字节码输出这么大?

问题描述

node --print-bytecode在包含最少代码的文件上运行只void 0;生成一个大小为 2.3 MB 的文件。仔细看,我以为它包含了 JIT 编译生成的汇编代码,但事实并非如此。不过,这并不能解释为什么它很大。将其与输出进行比较javap,即使它是针对不同语言的,也更小且更具可读性。

标签: node.jsv8

解决方案


我以为它包括由 JIT 编译生成的汇编代码,但事实并非如此。

正确,字节码不是汇编代码。汇编代码将在稍后生成,对于运行得足够热以至于 V8 决定对其进行优化的函数可能值得花时间投资。

为什么 Node.js 的字节码输出这么大?[...] 包含最少的代码的文件void 0;

很多 Node 本身都是用 JavaScript 编写的,所有这些都在执行之前被编译成字节码。所以即使你在一个空文件上运行 Node,你也会看到相当多的字节码。

它到底在说什么?

它与生成它的 JavaScript 代码相同。各个字节码指令的具体作用以及如何读取它们是 V8 的内部实现细节,并且可以随时更改。作为 Node(或 V8)的用户,你不应该有理由关心;特别是你不应该假设字节码格式随着时间/版本的变化是稳定的。打印它完全是为了调试引擎内部问题。


推荐阅读