io.js 是 Node.js 的一个分支。近日,一名具有 20 多年软件开发经验的工程师 Michael Schöbel 通过一组测试比较了两者的性能。
他分别使用io.js 和Node.js 实现了质数查找算法“埃拉托斯特尼筛法( Sieve of Eratosthenes )”,并且每一种实现又有三种实现形式,分别使用了常规数组、“类型数组(typed-array)”和 buffer。
io.js 和 Node.js 有一个重要的共同点,就是它们都基于 Chrome 的 V8 JavaScript 引擎。但它们基于不同的 V8 版本。在本次测试中,Schöbel 使用了 Node 0.10.35 和 io.js 1.0.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
从中可以看出:
- 类型数组和常规数组性能差异巨大;
- 使用 buffer 时,io.js 用时比 Node.js 长 18%;
- 使用类型数组时,io.js 用时是 Node.js 的 2 倍多;
- 使用常规数组时,Node.js 用时是 io.js 的 5 倍多。
对于这个结果,Schöbel 表示:
- 这不是一个专业的综合性的测试,该测试所用的算法与现实开发中的用法可能完全不同;
- 由于两种框架基于不同的 V8 JavaScript 引擎,所以这个测试实际上也比较了 V8 的不同版本;
- 如果一个项目大量使用 CPU,并且部署在 AWS 或 Azure 这样的服务器上,那么选择合适的 Node.js/io.js 版本可以降低成本。
最后请谨记:务必使用不同版本的 Node.js/io.js 测试代码。
感谢郭蕾对本文的审校。
给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ )或者腾讯微博( @InfoQ )关注我们,并与我们的编辑和其他读者朋友交流。
评论