Skip to content

stream: optimize forEach(), some(), every() and find() functions on Readable - #65890

Open
lukiano wants to merge 1 commit into
nodejs:mainfrom
lukiano:chore/faster-foreach
Open

stream: optimize forEach(), some(), every() and find() functions on Readable#65890
lukiano wants to merge 1 commit into
nodejs:mainfrom
lukiano:chore/faster-foreach

Conversation

@lukiano

@lukiano lukiano commented Sep 7, 2026

Copy link
Copy Markdown

I'm splitting my previous PR into smaller chunks, hoping the changes are easier to understand.

This one modifies the following iterator helpers:

  • forEach()
  • some()
  • every()
  • find()

Please see my previous PR that contains screenshots of benchmarks showcasing the performance improvements in this proposal.

Note that some and every used to depend on filter but they now depend on find.

In terms of the logic inside operators.js, it's not easy to view these changes as a diff because the previous logic almost entirely relied on createAsyncIterator, which is in a different file (readable.js) and the asynchronous iteration engine that v8 provides. The new proposal is an implementation from scratch that keeps the same compatibility evaluated by the tests, but with improved performance. It's better to consider both as black box implementations rather than trying to diff.

…eadable

    Signed-off-by: Luciano Leggieri <230980@gmail.com>
    Assisted-by: Sol 5.6
@nodejs-github-bot

Copy link
Copy Markdown
Collaborator

Review requested:

  • @nodejs/streams

@nodejs-github-bot nodejs-github-bot added needs-ci PRs that need a full CI run. stream Issues and PRs related to Node.js streams. labels Sep 7, 2026
@github-actions

github-actions Bot commented Sep 7, 2026

Copy link
Copy Markdown
Contributor

Welcome to Node.js, and thank you for your first contribution!

Before review, please take a moment to read:

Please make sure every commit is signed off. For a first pull request, GitHub Actions require collaborator approval and Jenkins CI must be started by a collaborator or triager, so an initial wait is normal.

@codecov

codecov Bot commented Sep 8, 2026

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 95.96413% with 9 lines in your changes missing coverage. Please review.
✅ Project coverage is 90.17%. Comparing base (b4c83f5) to head (0203c1c).
⚠️ Report is 13 commits behind head on main.

Files with missing lines Patch % Lines
lib/internal/streams/operators.js 95.96% 8 Missing and 1 partial ⚠️
Additional details and impacted files
@@           Coverage Diff            @@
##             main   #65890    +/-   ##
========================================
  Coverage   90.16%   90.17%            
========================================
  Files         771      771            
  Lines      265094   265299   +205     
  Branches    50367    50422    +55     
========================================
+ Hits       239035   239234   +199     
- Misses      17000    17015    +15     
+ Partials     9059     9050     -9     
Files with missing lines Coverage Δ
lib/internal/streams/operators.js 95.63% <95.96%> (+0.24%) ⬆️

... and 19 files with indirect coverage changes

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

needs-ci PRs that need a full CI run. stream Issues and PRs related to Node.js streams.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants