内容简介:Node.js 8.0.0 async pattern benchmark
Node.js 的 8.0 版本终于发布了,等了两天没人测评,于是决定抛砖引玉。
首先需要说明的是,由于不方便拿业务代码测试来评测,所以本次基准测试(benchmark)毫无新意的沿用了 bluebird 的基准测试。测试比较的的内容是多个异步模式(async pattern)之间的性能对比。
目前 Node.js 业内比较异步模式性能比较靠谱的方式是基于 Gorki Kosev’s 的 《Analysis of generators and other async patterns in node》 的 benchmark。该 benchmark 模拟会模拟同时混合大量同步与异步操作的处理场景。具体指标是处理这些操作消耗的时间(ms)以及内存(MB)。
直接上一个 Node.js v8.0.0 的测试报告:
results for 10000 parallel executions, 1 ms per I/O op file time(ms) memory(MB) callbacks-baseline.js 328 24.11 callbacks-suguru03-neo-async-waterfall.js 409 35.66 promises-bluebird-generator.js 703 40.76 promises-bluebird.js 781 51.74 promises-then-promise.js 922 67.02 promises-cujojs-when.js 963 65.11 promises-lvivski-davy.js 1071 96.27 promises-tildeio-rsvp.js 1159 87.05 callbacks-caolan-async-waterfall.js 1345 102.79 promises-dfilatov-vow.js 1504 131.96 promises-calvinmetcalf-lie.js 1870 164.99 promises-ecmascript6-native.js 2167 167.91 promises-obvious-kew.js 2269 225.37 generators-tj-co.js 2273 119.98 observables-pozadi-kefir.js 3170 188.55 promises-medikoo-deferred.js 3202 114.25 observables-Reactive-Extensions-RxJS.js 4622 238.07 streamline-generators.js 6096 128.54 promises-kriskowal-q.js 12051 391.93 observables-caolan-highland.js 12269 534.94 streamline-callbacks.js 62359 198.94 observables-baconjs-bacon.js.js OOM OOM Platform info: Linux 2.6.32-042stab117.14 x64 Node.JS 7.7.4 V8 5.5.372.42 Intel(R) Xeon(R) CPU L5640 @ 2.27GHz × 2
其中的测试项中, 比较常见的详情分别是:
- callbacks-baseline.js 原生 callback
- callbacks-suguru03-neo-async-waterfall.js NPM 模块 neo-async (300+ star)
- promises-bluebird-generator.js NPM 模块 bluebird (14k+ star) 的 generator 实现
- promises-bluebird.js NPM 模块 bluebird (14k+ star) 的 promise 实现
- promises-then-promise.js NPM 模块 promise (1.5k+ star)
- promises-cujojs-when.js NPM 模块 when (3.2k+ star)
- callbacks-caolan-async-waterfall.js NPM 模块 async (21k+ star)
- promises-ecmascript6-native.js V8 原生 Promise 实现
- generators-tj-co.js NPM 模块 co (8k+ star)
- observables-Reactive-Extensions-RxJS.js NPM 模块 rx (16k+ star)
- promises-kriskowal-q.js NPM 模块 q (13k+ star)
执行速度最快的还是原生的 callback
在内存占用方面可以看到 native 的 promise 较之前的版本有明显的下降,已经达到 async 模块的水平了。
完整执行数据 (ms)
pattern | 6-1 | 6-2 | 7-1 | 7-2 | 8-1 | 8-2 |
---|---|---|---|---|---|---|
callbacks-baseline.js | 335 | 348 | 345 | 328 | 357 | 370 |
callbacks-suguru03-neo-async-waterfall.js | 426 | 433 | 428 | 409 | 462 | 428 |
promises-bluebird.js | 829 | 892 | 750 | 781 | 779 | 770 |
promises-bluebird-generator.js | 838 | 973 | 707 | 703 | 782 | 789 |
promises-cujojs-when.js | 916 | 961 | 978 | 963 | 977 | 965 |
promises-then-promise.js | 827 | 913 | 940 | 922 | 987 | 1102 |
promises-lvivski-davy.js | 1014 | 1149 | 1035 | 1071 | 1131 | 1142 |
promises-tildeio-rsvp.js | 1085 | 1124 | 1189 | 1159 | 1186 | 1142 |
promises-ecmascript6-native.js | 2530 | 2540 | 2286 | 2167 | 1216 | 1350 |
callbacks-caolan-async-waterfall.js | 1317 | 1312 | 1427 | 1345 | 1433 | 1430 |
generators-tj-co.js | 2753 | 2642 | 2267 | 2273 | 1616 | 1671 |
promises-dfilatov-vow.js | 1382 | 1496 | 1665 | 1504 | 1688 | 1770 |
promises-calvinmetcalf-lie.js | 1650 | 1795 | 1784 | 1870 | 2031 | 2177 |
promises-obvious-kew.js | 2326 | 2421 | 2173 | 2269 | 2610 | 2667 |
promises-medikoo-deferred.js | 4231 | 4416 | 3477 | 3202 | 3227 | 3048 |
observables-pozadi-kefir.js | 60466 | 64587 | 3177 | 3170 | 3442 | 3161 |
streamline-generators.js | 5533 | 6048 | 6682 | 6096 | 3013 | 3228 |
streamline-callbacks.js | 8340 | 8784 | 79046 | 62359 | 4360 | 4339 |
observables-Reactive-Extensions-RxJS.js | 4488 | 4947 | 4514 | 4622 | 5614 | 5578 |
observables-caolan-highland.js | 152903 | 164368 | 12903 | 12269 | 17796 | 17243 |
promises-kriskowal-q.js | 14618 | 15963 | 13198 | 12051 | 21159 | 19219 |
observables-baconjs-bacon.js.js | 37014 | 33282 | – | – | 45257 | – |
完整内存数据 (MB)
小结
- neo 版的 async 依旧是最快的异步解决方案。
- 依赖 native 版本的实现(promise/co 等)都有一定程度的性能、内存提升(不过提升的不是很多)。
- native 的 promise 在提升之后性能已与 async 模块相当,并且 bluebird 的实现与 native 版本差距进一步缩小,bluebird 已经没有成倍的优势。
PS:目前该 benchmark 尚未加入 async/await (笔者已经提了 issue,在考虑要不要自己撸),加入之后会更新本文。
以上所述就是小编给大家介绍的《Node.js 8.0.0 async pattern benchmark》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
数据挖掘导论
Pang-Ning Tan、Michael Steinbach、Vipin Kumar / 范明、范宏建 / 人民邮电出版社 / 2010-12-10 / 69.00元
本书全面介绍了数据挖掘,涵盖了五个主题:数据、分类、关联分析、聚类和异常检测。除异常检测外,每个主题都有两章。前一章涵盖基本概念、代表性算法和评估技术,而后一章讨论高级概念和算法。这样读者在透彻地理解数据挖掘的基础的同时,还能够了解更多重要的高级主题。 本书是明尼苏达大学和密歇根州立大学数据挖掘课程的教材,由于独具特色,正式出版之前就已经被斯坦福大学、得克萨斯大学奥斯汀分校等众多名校采用。 ......一起来看看 《数据挖掘导论》 这本书的介绍吧!