summaryrefslogtreecommitdiff
path: root/benchmark
diff options
context:
space:
mode:
authorRobert Nagy <ronagy@icloud.com>2020-06-23 23:08:14 +0200
committerRobert Nagy <ronagy@icloud.com>2020-07-17 09:06:27 +0200
commit08e8997d54e2e16a191267a1c8b5676a7486e130 (patch)
tree7b4e175a24bb3eb4fd11c288ca43963548d927ee /benchmark
parentbf0d82c1024710e13c9f2140cac2ed5acb273faf (diff)
downloadnode-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.js42
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);
+}