Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/nodejs/node.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRobert Nagy <ronagy@icloud.com>2020-06-24 00:08:14 +0300
committerRobert Nagy <ronagy@icloud.com>2020-07-17 10:06:27 +0300
commit08e8997d54e2e16a191267a1c8b5676a7486e130 (patch)
tree7b4e175a24bb3eb4fd11c288ca43963548d927ee /benchmark
parentbf0d82c1024710e13c9f2140cac2ed5acb273faf (diff)
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 00000000000..0455f67195f
--- /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);
+}