Node.js 和 io.js - 在性能上很不同
对于相同的代码你可能会遇到的性能相差5倍以上,这取决于你使用的是node还是io.js。
首先,让我说的更明白点。这不是也不可能是综合测试。每一个引用都是不一样的。我的发现可能或者不可能使用与你的案例,这取决于你的Node引用是做什么的。
我的测试
在前面的文章中,我使用C,JAVA,Javascript和FreePascal测试了一个很简单的算法性能寻找prime-numbers和Sieve of Eratosthenes。为了测试Javascript,我基于Node选择三种不同的实现算法,包括普通阵列,输入阵列或缓冲。
今天我将使用相同的标准来说明node.js与io.js之间有多大的性能差距。对于你们中那些对io.js还不了解的人,io.js是node的一个分支。
我将使用在我前面文章中出现的相同的代码。你们能够在文章的结尾找到它。
Node和io.js有一个重要的共同点。他们都依赖于Chrome的V8 Javascript引擎。但是他们使用的是不同的V8版本。所以,当我们比较Node和IO.js的时候,其实我是比较他们使用的不同版本的Chrome V8 JavaScript引擎。
在我的前一个测试中,我用的Node0.10.32,因为这是我使用的Linux发新版OpenSUSE13.2自带的。但是在今天的测试中,我将使用Node 0.10.35和io.js 1.0.2,因为他们是最新的发布版。是的,我知道io.js描述该版本为“不稳定”,但它是我唯一能获取的版本。
以运行在Intel i7-4771 3.5GHz上的64位OpenSuse 13.2系统为测试环境(作者话痨,还顺带提了一下自己之间写的文章中也用了同样的方法),前后测试了7次,测试结果(时间)取中位数,结果如下:
Node.js 0.10.35 | io.js 1.0.2 | |
Buffer | 4.259 | 5.006 |
Typed-Array | 4.944 | 11.555 |
Regular Array | 40.416 | 7.359 |
(时间单位为秒) |
如你所见,Node和io.js对typed-array和regular array性能的变化让人瞠目。
操作buffer,io.js比Node.js多花18%的时间。对这个结果来说不好不坏,无需操心。
对type-array的测试结果显示Node.js、io.js两者差距显著:后者所费时间超过前者的两倍!
对regular array的测试却得出了相反的结果,而且更加明显:Node.js所费时间超过了io.js的5倍!
它们性能差异如此之大让我深感烦扰。作为如此成熟的产品,V8 JS引擎在不同版本上所表现的差异实在大。 我只能忍受性能伴随版本更新一直提升的产品,但上述测试数据表明性能有可能适得其反,这实在不该发生。
结论
难决胜负!Node和io.js相互间时有赶超。但得牢记一点:这个小测试还和实际应用相差甚远呢。
据我所悉,就连不同版本的Node都会有不同。曾记得一个开发版的Node在处理buffer的性能上却有下降表现,参考issue on GitHub.
如果项目部署于AWS或Azure的多台server上,CPU开销较重,那么这个问题将十分重要。如果application在你所用的Node/io.js上的性能很差,那你得需要更多的server,这将让你更费银子。
本文浓缩成一句可取的话即:时刻牢记,测试你的代码在不同版本Node/io.js上的性能。
下面的内容更精彩:
Node.js 的详细介绍:请点这里
Node.js 的下载地址:请点这里