web-dev-qa-db-ja.com

NodeとBluebirdなどのライブラリでは、ネイティブの約束がまだ遅いですか?

この質問はまだ当てはまりますか なぜネイティブES6はブルーバードよりも低速でメモリ消費量が多い約束ですか?

Node.jsとEC7の最新バージョンについて

4
bloppit

はい

私はいくつかのテストを行いましたが、2016年9月の時点でBluebirdはまだはるかに高速であるようです。

Bluebird Webサイトのベンチマークについては、以下を参照してください。

ただし、必要な特定のユースケースに対して独自のテストを行うことが常に最善です。以下は、多数の_.then_およびnew Promise()を使用した、非常に深くネストされたpromiseに対する私の独自のテストです。

私のテスト

これが私のテストです:

_native.js_

_var P = Promise;
var p = P.resolve('done');
for (var i = 0; i < 1000000; i++) {
  p = p.then(a => new P((res, rej) => res(a)));
}
p.then(console.log);
_

_bluebird.js_

_var P = require('bluebird');
var p = P.resolve('done');
for (var i = 0; i < 1000000; i++) {
  p = p.then(a => new P((res, rej) => res(a)));
}
p.then(console.log);
_

速度

Node 5.12.0:

_$ time node native.js
real    0m5.508s
user    0m5.040s
sys     0m0.385s

$ time node bluebird.js 
real    0m0.968s
user    0m0.861s
sys     0m0.071s
_

Node 6.5.0:

_$ time node native.js
real    0m7.609s
user    0m7.362s
sys     0m0.260s

$ time node bluebird.js 
real    0m1.053s
user    0m1.033s
sys     0m0.053s
_

記憶

Node 5.12.0:

_$ /usr/bin/time -v node native.js 2>&1 | grep Maximum
Maximum resident set size (kbytes): 886644

$ /usr/bin/time -v node bluebird.js 2>&1 | grep Maximum
Maximum resident set size (kbytes): 186940
_

Node 6.5.0:

_$ /usr/bin/time -v node native.js 2>&1 | grep Maximum
Maximum resident set size (kbytes): 767832

$ /usr/bin/time -v node bluebird.js 2>&1 | grep Maximum
Maximum resident set size (kbytes): 187912
_

どちらかと言えば、ネイティブのプロミスが遅くなっているようです。

10
rsp