内容简介: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》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Mathematica Cookbook
Sal Mangano / O'Reilly Media / 2009 / GBP 51.99
As the leading software application for symbolic mathematics, Mathematica is standard in many environments that rely on math, such as science, engineering, financial analysis, software development, an......一起来看看 《Mathematica Cookbook》 这本书的介绍吧!