stream: share webstreams async iterator methods · nodejs/node@158f6f7 · GitHub
Skip to content

Commit 158f6f7

Browse files
mcollinaaduh95
authored andcommitted
stream: share webstreams async iterator methods
ReadableStream.prototype.values() built each iterator from an object literal with a computed symbol-key method plus five closures. Such a literal is rebuilt through the runtime on every evaluation, costing close to a microsecond per iterator, which dominates iterating a short-lived stream. Move next() and return() to a shared ReadableStreamAsyncIterator prototype, as for any WebIDL async iterator, and keep the per-iterator state in its read request. The prototype chain and property shape are the ones WPT checks; the placeholder AsyncIterator object in util.js is no longer needed. As in WebIDL, next() and return() now reject when called on something that is not a ReadableStream async iterator, and iterators no longer carry own next/return properties. Add an async-iterator kind to benchmark/webstreams/lifecycle.js. webstreams/lifecycle.js kind='async-iterator' *** +16.22% Signed-off-by: Matteo Collina <hello@matteocollina.com> PR-URL: #66392 Reviewed-By: Paolo Insogna <paolo@cowtech.it> Reviewed-By: René <contact.9a5d6388@renegade334.me.uk>
1 parent aff6017 commit 158f6f7

4 files changed

Lines changed: 239 additions & 158 deletions

File tree

‎benchmark/webstreams/lifecycle.js‎

Lines changed: 16 additions & 1 deletion

0 commit comments

Comments
 (0)