缩小NodeJS中使用的代码是否有意义?

我想知道,因为Clojure编译器和UglifyJS不仅优化代码的大小,而且性能(尽pipe我认为大小是主要优先级),如果我的node.js应用程序被缩小,它会运行得更快吗? 我知道它可能取决于应用程序,但我一般问这个。

在节点中,主要的处理成本是I / O操作,而不是实际的JavaScript本身。 举个例子:

fs.readFile(myFile, function (err, data) { processTheFile(data); }); 

在这里,调用readFile和被触发的callback之间的差距将比callback所花费的时间长数倍。 (如果相反,你可能不应该使用节点。)

所以优化processTheFilefunction的速度是毫无意义的,因为你正在节省一小部分非常小的数字。

缩小可以提高性能。

节点的V8优化编译器根据一些启发式内联function。 缩小影响这些启发式。 这可能会导致以前没有内联函数的内联。 由于内联函数通常执行得更快,因此可以提高性能。

节点9.0+ / V8 6.2+(Turbofan) – 性能稍有改进

如果函数未优化的字节码大小小于500,则它将被内联。 缩小通常会减lessAST(抽象语法树)节点数量。 由于字节码是从AST直接生成的,所以我们可以预期字节码的大小也会有所减less。

来源: [Turbofan]使用字节码大小进行内联启发式。

节点8.3+ / V8 5.9+(Turbofan)→小的性能改进

如果函数的AST节点数less于196,则将被内联。 缩小通常会减lessAST节点数量。

来源: [turbofan]不要考虑内联启发式的源码大小。

节点8.2之前和/ V8 5.8(曲轴)之前→主要性能改进

如果函数的字符数(包括空格和注释) 小于600 ,则将被内联。

假设我们有一个超过600个字符的函数:

 function f() { // A long comment... bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla return 1; } 

缩小会将其减less到function f(){return 1}

如果我们现在同时调用两个变体并比较原始缩小函数的性能,我们得到以下结果:

原始与缩小的性能

显然,缩小function的执行速度要快两倍以上

另请参阅: #NodeJS:快速优化build议

基于以下两个链接,它确实有很大的意义:

快速优化build议

2017年2月3日试运行

不再是真的

是的,Node6现在基于v8 5.1,它使用TurboFan。 正如v8团队所说( https://bugs.chromium.org/p/v8/issues/detail?id=3354 ),他们放弃了内联字符计数触发器。

https://medium.com/@c2c/yes-node6-is-now-based-on-v8-5-1-7a645eb9992b https://bugs.chromium.org/p/v8/issues/detail?id= 3354