diff options
author | Robert Nagy <ronagy@icloud.com> | 2020-06-23 23:08:14 +0200 |
---|---|---|
committer | Robert Nagy <ronagy@icloud.com> | 2020-07-17 09:06:27 +0200 |
commit | 08e8997d54e2e16a191267a1c8b5676a7486e130 (patch) | |
tree | 7b4e175a24bb3eb4fd11c288ca43963548d927ee /benchmark | |
parent | bf0d82c1024710e13c9f2140cac2ed5acb273faf (diff) | |
download | node-new-08e8997d54e2e16a191267a1c8b5676a7486e130.tar.gz |
stream: simpler and faster Readable async iterator
Reimplement as an async generator instead of a custom
iterator class.
PR-URL: https://github.com/nodejs/node/pull/34035
Reviewed-By: Matteo Collina <matteo.collina@gmail.com>
Reviewed-By: Benjamin Gruenbaum <benjamingr@gmail.com>
Reviewed-By: James M Snell <jasnell@gmail.com>
Diffstat (limited to 'benchmark')
-rw-r--r-- | benchmark/streams/readable-async-iterator.js | 42 |
1 files changed, 42 insertions, 0 deletions
diff --git a/benchmark/streams/readable-async-iterator.js b/benchmark/streams/readable-async-iterator.js new file mode 100644 index 0000000000..0455f67195 --- /dev/null +++ b/benchmark/streams/readable-async-iterator.js @@ -0,0 +1,42 @@ +'use strict'; + +const common = require('../common'); +const Readable = require('stream').Readable; + +const bench = common.createBenchmark(main, { + n: [1e5], + sync: ['yes', 'no'], +}); + +async function main({ n, sync }) { + sync = sync === 'yes'; + + const s = new Readable({ + objectMode: true, + read() { + if (sync) { + this.push(1); + } else { + process.nextTick(() => { + this.push(1); + }); + } + } + }); + + bench.start(); + + let x = 0; + for await (const chunk of s) { + x += chunk; + if (x > n) { + break; + } + } + + // Side effect to ensure V8 does not optimize away the + // loop as a noop. + console.log(x); + + bench.end(n); +} |