Node.js 8.0.0 async pattern benchmark

栏目: Node.js · 发布时间: 7年前

内容简介: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

其中的测试项中, 比较常见的详情分别是:

执行速度最快的还是原生的 callback

Node.js 8.0.0 async pattern benchmark

在内存占用方面可以看到 native 的 promise 较之前的版本有明显的下降,已经达到 async 模块的水平了。

Node.js 8.0.0 async pattern benchmark

完整执行数据 (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)

pattern 6-1 6-2 7-1 7-2 8-1 8-2
callbacks-baseline.js 30 30 24 24 31 31
callbacks-suguru03-neo-async-waterfall.js 43 43 35 35 39 39
promises-bluebird-generator.js 39 40 40 40 41 43
promises-bluebird.js 49 49 50 51 49 48
promises-cujojs-when.js 59 60 65 65 61 60
promises-then-promise.js 59 59 68 67 73 74
generators-tj-co.js 131 131 119 119 74 75
promises-tildeio-rsvp.js 89 89 88 87 80 82
promises-lvivski-davy.js 91 90 97 96 103 102
streamline-generators.js 179 179 129 128 102 102
promises-ecmascript6-native.js 187 187 163 167 95 104
callbacks-caolan-async-waterfall.js 101 101 102 102 108 108
streamline-callbacks.js 163 251 199 198 127 126
promises-dfilatov-vow.js 130 147 132 131 153 159
promises-calvinmetcalf-lie.js 152 135 164 164 147 166
promises-medikoo-deferred.js 190 190 114 114 183 183
observables-pozadi-kefir.js 146 152 188 188 202 202
promises-obvious-kew.js 217 216 79 225 228 232
observables-Reactive-Extensions-RxJS.js 229 230 236 238 243 244
promises-kriskowal-q.js 837 848 370 391 387 388
observables-caolan-highland.js 485 492 517 534 585 559
observables-baconjs-bacon.js.js 826 833 582

小结

  • neo 版的 async 依旧是最快的异步解决方案。
  • 依赖 native 版本的实现(promise/co 等)都有一定程度的性能、内存提升(不过提升的不是很多)。
  • native 的 promise 在提升之后性能已与 async 模块相当,并且 bluebird 的实现与 native 版本差距进一步缩小,bluebird 已经没有成倍的优势。

PS:目前该 benchmark 尚未加入 async/await (笔者已经提了 issue,在考虑要不要自己撸),加入之后会更新本文。

http://echarts.min.js


以上所述就是小编给大家介绍的《Node.js 8.0.0 async pattern benchmark》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Mathematica Cookbook

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》 这本书的介绍吧!

JS 压缩/解压工具
JS 压缩/解压工具

在线压缩/解压 JS 代码

Markdown 在线编辑器
Markdown 在线编辑器

Markdown 在线编辑器

正则表达式在线测试
正则表达式在线测试

正则表达式在线测试