Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

http: reduce parts in chunked response when corking #50167

Merged
merged 4 commits into from
Oct 15, 2023

Conversation

ronag
Copy link
Member

@ronag ronag commented Oct 12, 2023

Avoid splitting chunked responses into multiple parts when corking. This makes a large difference performance-wise on the client side.

Previously when writing to a chunked response Node would create a separate chunk for each call to .write(...) regardless whether the response was corked or not. This leads to unnecessary overhead both on the client and server side.

This PR fixes this by creating a single chunk for all calls to write(...) when uncorking the response.

Consider the following example based on https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Transfer-Encoding#chunked_encoding:

res.cork();
res.write('Mozilla');
res.write(' Developer Network');
res.uncork();

At the beginning of each chunk you need to add the length of the current chunk in hexadecimal format, followed by '\r\n' and then the chunk itself, followed by another '\r\n'. The terminating chunk is a regular chunk, with the exception that its length is zero.

Resulting in a response stream looking like this:

HTTP/1.1 200 OK
Content-Type: text/plain
Transfer-Encoding: chunked

7\r\n
Mozilla\r\n
18\r\n
 Developer Network\r\n
0\r\n
\r\n

After this PR everything is combined into a single chunk when uncorking the response bypassing a lot of unnecessary overhead.

HTTP/1.1 200 OK
Content-Type: text/plain
Transfer-Encoding: chunked

25\r\n
Mozilla Developer Network\r\n
0\r\n
\r\n

Refs: nodejs/performance#57

@nodejs-github-bot
Copy link
Collaborator

Review requested:

  • @nodejs/http
  • @nodejs/net

@nodejs-github-bot nodejs-github-bot added http Issues or PRs related to the http subsystem. needs-ci PRs that need a full CI run. labels Oct 12, 2023
@ronag
Copy link
Member Author

ronag commented Oct 12, 2023

@nodejs/performance @nodejs/http

@ronag ronag requested a review from mcollina October 12, 2023 20:38
@ronag ronag marked this pull request as ready for review October 12, 2023 20:38
ronag added a commit to nxtedition/node that referenced this pull request Oct 12, 2023
ronag added a commit to nxtedition/node that referenced this pull request Oct 12, 2023
ronag added a commit to nxtedition/node that referenced this pull request Oct 12, 2023
ronag added a commit to nxtedition/node that referenced this pull request Oct 12, 2023
@ronag ronag added the notable-change PRs with changes that should be highlighted in changelogs. label Oct 12, 2023
@github-actions
Copy link
Contributor

The notable-change PRs with changes that should be highlighted in changelogs. label has been added by @ronag.

Please suggest a text for the release notes if you'd like to include a more detailed summary, then proceed to update the PR description with the text or a link to the notable change suggested text comment.

ronag added a commit to nxtedition/node that referenced this pull request Oct 12, 2023
ronag added a commit to nxtedition/node that referenced this pull request Oct 12, 2023
@ronag
Copy link
Member Author

ronag commented Oct 12, 2023

@RafaelGSS maybe too tight with v21 but I think this is quite a notable change that can have impact.

lib/_http_outgoing.js Outdated Show resolved Hide resolved
@ronag ronag added the request-ci Add this label to start a Jenkins CI on a PR. label Oct 12, 2023
ronag added a commit to nxtedition/node that referenced this pull request Oct 12, 2023
@nodejs-github-bot
Copy link
Collaborator

@ronag
Copy link
Member Author

ronag commented Oct 14, 2023

@nodejs/http

@rluvaton
Copy link
Member

rluvaton commented Oct 14, 2023

Can you please include benchmark code and results?

@ronag
Copy link
Member Author

ronag commented Oct 14, 2023

@rluvaton are you blocking on that?

@rluvaton
Copy link
Member

rluvaton commented Oct 14, 2023

No, because of the tight release time but would appreciate in a different pr

@ronag ronag added the review wanted PRs that need reviews. label Oct 14, 2023
@ronag
Copy link
Member Author

ronag commented Oct 15, 2023

Copy link
Member

@mcollina mcollina left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

lgtm

@mcollina mcollina added commit-queue Add this label to land a pull request using GitHub Actions. commit-queue-squash Add this label to instruct the Commit Queue to squash all the PR commits into the first one. labels Oct 15, 2023
@nodejs-github-bot nodejs-github-bot added commit-queue-failed An error occurred while landing this pull request using GitHub Actions. and removed commit-queue Add this label to land a pull request using GitHub Actions. labels Oct 15, 2023
@nodejs-github-bot
Copy link
Collaborator

Commit Queue failed
- Loading data for nodejs/node/pull/50167
✔  Done loading data for nodejs/node/pull/50167
----------------------------------- PR info ------------------------------------
Title      http: reduce parts in chunked response when corking (#50167)
Author     Robert Nagy  (@ronag)
Branch     ronag:batch-chunked -> nodejs:main
Labels     http, semver-major, notable-change, author ready, needs-ci, review wanted, needs-benchmark-ci, commit-queue-squash
Commits    4
 - http: reduce parts in chunked response when corking
 - fixup
 - Update _http_outgoing.js
 - Update _http_outgoing.js
Committers 2
 - Robert Nagy 
 - GitHub 
PR-URL: https://github.com/nodejs/node/pull/50167
Refs: https://github.com/nodejs/performance/issues/57
Reviewed-By: Stephen Belanger 
Reviewed-By: Matteo Collina 
------------------------------ Generated metadata ------------------------------
PR-URL: https://github.com/nodejs/node/pull/50167
Refs: https://github.com/nodejs/performance/issues/57
Reviewed-By: Stephen Belanger 
Reviewed-By: Matteo Collina 
--------------------------------------------------------------------------------
   ℹ  This PR was created on Thu, 12 Oct 2023 20:35:42 GMT
   ✔  Approvals: 2
   ✔  - Stephen Belanger (@Qard): https://github.com/nodejs/node/pull/50167#pullrequestreview-1676981875
   ✔  - Matteo Collina (@mcollina) (TSC): https://github.com/nodejs/node/pull/50167#pullrequestreview-1678717255
   ✘  semver-major requires at least 2 TSC approvals
   ✔  Last GitHub CI successful
   ℹ  Last Full PR CI on 2023-10-14T11:56:46Z: https://ci.nodejs.org/job/node-test-pull-request/54775/
   ℹ  Last CITGM CI on 2023-10-15T06:14:29Z: https://ci.nodejs.org/view/Node.js-citgm/job/citgm-smoker/3329/
- Querying data for job/node-test-pull-request/3329/
   ✔  Last Jenkins CI successful
--------------------------------------------------------------------------------
   ✔  Aborted `git node land` session in /home/runner/work/node/node/.ncu
https://github.com/nodejs/node/actions/runs/6522888569

@ronag
Copy link
Member Author

ronag commented Oct 15, 2023

@Trott Can you help landing this?

@ronag
Copy link
Member Author

ronag commented Oct 15, 2023

@nodejs/tsc needs another approval. The semver major is because it might break clients that make incorrect assumptions about the chunking of responses.

@anonrig anonrig added commit-queue Add this label to land a pull request using GitHub Actions. and removed commit-queue-failed An error occurred while landing this pull request using GitHub Actions. labels Oct 15, 2023
@nodejs-github-bot nodejs-github-bot removed the commit-queue Add this label to land a pull request using GitHub Actions. label Oct 15, 2023
@nodejs-github-bot nodejs-github-bot merged commit d68d0ea into nodejs:main Oct 15, 2023
68 checks passed
@nodejs-github-bot
Copy link
Collaborator

Landed in d68d0ea

@RafaelGSS
Copy link
Member

@ronag can you update the PR to include a description for the blog post? Something easy for users, thank you!

RafaelGSS added a commit that referenced this pull request Oct 15, 2023
Notable Changes:

doc:
  * promote fetch/webstreams from experimental to stable (Steven) #45684
esm:
  * use import attributes instead of import assertions (Antoine du Hamel) #50140
  * --experimental-default-type flag to flip module defaults (Geoffrey Booth) #49869
  * remove `globalPreload` hook (superseded by `initialize`) (Jacob Smith) #49144
fs:
  * add flush option to writeFile() functions (Colin Ihrig) #50009
  * (SEMVER-MAJOR) add globSync implementation (Moshe Atlow) #47653
http:
  * (SEMVER-MAJOR) reduce parts in chunked response when corking (Robert Nagy) #50167
lib:
  * (SEMVER-MINOR) add WebSocket client (Matthew Aitken) #49830
stream:
  * optimize Writable (Robert Nagy) #50012
test_runner:
  * (SEMVER-MAJOR) support passing globs (Moshe Atlow) #47653
vm:
  * use default HDO when importModuleDynamically is not set (Joyee Cheung) #49950

Semver-Major Commits:

* (SEMVER-MAJOR) reset embedder string to "-node.0" (Michaël Zasso) #49639
* (SEMVER-MAJOR) drop support for Visual Studio 2019 (Michaël Zasso) #49051
* (SEMVER-MAJOR) bump supported macOS and Xcode versions (Michaël Zasso) #49164
* (SEMVER-MAJOR) do not overwrite _writableState.defaultEncoding (Tobias Nießen) #49140
* (SEMVER-MAJOR) bump minimum ICU version to 73 (Michaël Zasso) #49639
* (SEMVER-MAJOR) V8: cherry-pick 8ec2651fbdd8 (Michaël Zasso) #49639
* (SEMVER-MAJOR) V8: cherry-pick 89b3702c92b0 (Michaël Zasso) #49639
* (SEMVER-MAJOR) V8: cherry-pick de9a5de2274f (Michaël Zasso) #49639
* (SEMVER-MAJOR) V8: cherry-pick b5b5d6c31bb0 (Michaël Zasso) #49639
* (SEMVER-MAJOR) V8: cherry-pick 93b1a74cbc9b (Michaël Zasso) #49639
* (SEMVER-MAJOR) V8: cherry-pick 1a3ecc2483b2 (Michaël Zasso) #49639
* (SEMVER-MAJOR) patch V8 to avoid duplicated zlib symbol (Michaël Zasso) #49639
* (SEMVER-MAJOR) remove usage of a C++20 feature from V8 (Michaël Zasso) #49639
* (SEMVER-MAJOR) avoid compilation error with ASan (Michaël Zasso) #49639
* (SEMVER-MAJOR) disable V8 concurrent sparkplug compilation (Michaël Zasso) #49639
* (SEMVER-MAJOR) silence irrelevant V8 warning (Michaël Zasso) #49639
* (SEMVER-MAJOR) always define V8_EXPORT_PRIVATE as no-op (Michaël Zasso) #49639
* (SEMVER-MAJOR) update V8 to 11.8.172.13 (Michaël Zasso) #49639
* (SEMVER-MAJOR) update llhttp to 9.1.2 (Paolo Insogna) #48981
* (SEMVER-MAJOR) validate options of `on` and `once` (Deokjin Kim) #46018
* (SEMVER-MAJOR) adjust `position` validation in reading methods (Livia Medeiros) #42835
* (SEMVER-MAJOR) add globSync implementation (Moshe Atlow) #47653
* (SEMVER-MAJOR) reduce parts in chunked response when corking (Robert Nagy) #50167
* (SEMVER-MAJOR) update usage of always on Atomics API (Michaël Zasso) #49639
* (SEMVER-MAJOR) mark URL/URLSearchParams as uncloneable and untransferable (Chengzhong Wu) #47497
* (SEMVER-MAJOR) remove aix directory case for package reader (Yagiz Nizipli) #48605
* (SEMVER-MAJOR) add `navigator.hardwareConcurrency` (Yagiz Nizipli) #47769
* (SEMVER-MAJOR) runtime deprecate punycode (Yagiz Nizipli) #47202
* (SEMVER-MAJOR) harmonize error code between ESM and CJS (Antoine du Hamel) #48606
* (SEMVER-MAJOR) do not treat `server.maxConnections=0` as `Infinity` (ignoramous) #48276
* (SEMVER-MAJOR) only defer _final call when connecting (Jason Zhang) #47385
* (SEMVER-MAJOR) rename internal NAPI_VERSION definition (Chengzhong Wu) #48501
* (SEMVER-MAJOR) update NODE_MODULE_VERSION to 120 (Michaël Zasso) #49639
* (SEMVER-MAJOR) throw DOMException on cloning non-serializable objects (Chengzhong Wu) #47839
* (SEMVER-MAJOR) throw DataCloneError on transfering untransferable objects (Chengzhong Wu) #47604
* (SEMVER-MAJOR) use private properties for strategies (Yagiz Nizipli) #47218
* (SEMVER-MAJOR) use private properties for encoding (Yagiz Nizipli) #47218
* (SEMVER-MAJOR) use private properties for compression (Yagiz Nizipli) #47218
* (SEMVER-MAJOR) skip v8-updates/test-linux-perf (Michaël Zasso) #49639
* (SEMVER-MAJOR) skip test-tick-processor-arguments on SmartOS (Michaël Zasso) #49639
* (SEMVER-MAJOR) adapt REPL test to V8 changes (Michaël Zasso) #49639
* (SEMVER-MAJOR) adapt test-fs-write to V8 internal changes (Michaël Zasso) #49639
* (SEMVER-MAJOR) update flag to disable SharedArrayBuffer (Michaël Zasso) #49639
* (SEMVER-MAJOR) adapt debugger tests to V8 11.4 (Philip Pfaffe) #49639
* (SEMVER-MAJOR) disallow array in `run` options (Raz Luvaton) #49935
* (SEMVER-MAJOR) support passing globs (Moshe Atlow) #47653
* (SEMVER-MAJOR) use `validateNumber` for `options.minDHSize` (Deokjin Kim) #49973
* (SEMVER-MAJOR) use validateFunction for `options.checkServerIdentity` (Deokjin Kim) #49896
* (SEMVER-MAJOR) add new V8 headers to distribution (Michaël Zasso) #49639
* (SEMVER-MAJOR) update V8 gypfiles for 11.8 (Michaël Zasso) #49639
* (SEMVER-MAJOR) update V8 gypfiles for 11.7 (Michaël Zasso) #49639
* (SEMVER-MAJOR) update V8 gypfiles for 11.6 (Michaël Zasso) #49639
* (SEMVER-MAJOR) update V8 gypfiles for 11.5 (Michaël Zasso) #49639
* (SEMVER-MAJOR) update V8 gypfiles for 11.4 (Michaël Zasso) #49639
* (SEMVER-MAJOR) runtime deprecate `promisify`-ing a function returning a `Promise` (Antoine du Hamel) #49609
* (SEMVER-MAJOR) freeze `dependencySpecifiers` array (Antoine du Hamel) #49720

PR-URL: #49870
Co-authored-by: Michaël Zasso <targos@protonmail.com>
@ronag
Copy link
Member Author

ronag commented Oct 16, 2023

@RafaelGSS I tried improving the description.

kumarrishav pushed a commit to kumarrishav/node that referenced this pull request Oct 16, 2023
Refs: nodejs/performance#57

PR-URL: nodejs#50167
Reviewed-By: Stephen Belanger <admin@stephenbelanger.com>
Reviewed-By: Matteo Collina <matteo.collina@gmail.com>
Reviewed-By: Yagiz Nizipli <yagiz@nizipli.com>
RafaelGSS added a commit that referenced this pull request Oct 17, 2023
Notable Changes:

doc:
  * promote fetch/webstreams from experimental to stable (Steven) #45684
esm:
  * use import attributes instead of import assertions (Antoine du Hamel) #50140
  * --experimental-default-type flag to flip module defaults (Geoffrey Booth) #49869
  * remove `globalPreload` hook (superseded by `initialize`) (Jacob Smith) #49144
fs:
  * add flush option to writeFile() functions (Colin Ihrig) #50009
  * (SEMVER-MAJOR) add globSync implementation (Moshe Atlow) #47653
http:
  * (SEMVER-MAJOR) reduce parts in chunked response when corking (Robert Nagy) #50167
lib:
  * (SEMVER-MINOR) add WebSocket client (Matthew Aitken) #49830
  * (SEMVER-MAJOR) add `navigator.hardwareConcurrency` (Yagiz Nizipli) #47769
stream:
  * optimize Writable (Robert Nagy) #50012
test_runner:
  * (SEMVER-MAJOR) support passing globs (Moshe Atlow) #47653
vm:
  * use default HDO when importModuleDynamically is not set (Joyee Cheung) #49950

Semver-Major Commits:

* (SEMVER-MAJOR) build: drop support for Visual Studio 2019 (Michaël Zasso) #49051
* (SEMVER-MAJOR) build: bump supported macOS and Xcode versions (Michaël Zasso) #49164
* (SEMVER-MAJOR) crypto: do not overwrite \_writableState.defaultEncoding (Tobias Nießen) #49140
* (SEMVER-MAJOR) deps: bump minimum ICU version to 73 (Michaël Zasso) #49639
* (SEMVER-MAJOR) deps: update V8 to 11.8.172.13 (Michaël Zasso) #49639
* (SEMVER-MAJOR) deps: update llhttp to 9.1.2 (Paolo Insogna) #48981
* (SEMVER-MAJOR) events: validate options of `on` and `once` (Deokjin Kim) #46018
* (SEMVER-MAJOR) fs: adjust `position` validation in reading methods (Livia Medeiros) #42835
* (SEMVER-MAJOR) fs: add globSync implementation (Moshe Atlow) #47653
* (SEMVER-MAJOR) http: reduce parts in chunked response when corking (Robert Nagy) #50167
* (SEMVER-MAJOR) lib: mark URL/URLSearchParams as uncloneable and untransferable (Chengzhong Wu) #47497
* (SEMVER-MAJOR) lib: remove aix directory case for package reader (Yagiz Nizipli) #48605
* (SEMVER-MAJOR) lib: add `navigator.hardwareConcurrency` (Yagiz Nizipli) #47769
* (SEMVER-MAJOR) lib: runtime deprecate punycode (Yagiz Nizipli) #47202
* (SEMVER-MAJOR) module: harmonize error code between ESM and CJS (Antoine du Hamel) #48606
* (SEMVER-MAJOR) net: do not treat `server.maxConnections=0` as `Infinity` (ignoramous) #48276
* (SEMVER-MAJOR) net: only defer \_final call when connecting (Jason Zhang) #47385
* (SEMVER-MAJOR) node-api: rename internal NAPI\_VERSION definition (Chengzhong Wu) #48501
* (SEMVER-MAJOR) src: update NODE\_MODULE\_VERSION to 120 (Michaël Zasso) #49639
* (SEMVER-MAJOR) src: throw DOMException on cloning non-serializable objects (Chengzhong Wu) #47839
* (SEMVER-MAJOR) src: throw DataCloneError on transfering untransferable objects (Chengzhong Wu) #47604
* (SEMVER-MAJOR) stream: use private properties for strategies (Yagiz Nizipli) #47218
* (SEMVER-MAJOR) stream: use private properties for encoding (Yagiz Nizipli) #47218
* (SEMVER-MAJOR) stream: use private properties for compression (Yagiz Nizipli) #47218
* (SEMVER-MAJOR) test\_runner: disallow array in `run` options (Raz Luvaton) #49935
* (SEMVER-MAJOR) test\_runner: support passing globs (Moshe Atlow) #47653
* (SEMVER-MAJOR) tls: use `validateNumber` for `options.minDHSize` (Deokjin Kim) #49973
* (SEMVER-MAJOR) tls: use validateFunction for `options.checkServerIdentity` (Deokjin Kim) #49896
* (SEMVER-MAJOR) util: runtime deprecate `promisify`-ing a function returning a `Promise` (Antoine du Hamel) #49609
* (SEMVER-MAJOR) vm: freeze `dependencySpecifiers` array (Antoine du Hamel) #49720

PR-URL: #49870
Co-authored-by: Michaël Zasso <targos@protonmail.com>
RafaelGSS added a commit that referenced this pull request Oct 17, 2023
Notable Changes:

doc:
  * promote fetch/webstreams from experimental to stable (Steven) #45684
esm:
  * use import attributes instead of import assertions (Antoine du Hamel) #50140
  * --experimental-default-type flag to flip module defaults (Geoffrey Booth) #49869
  * remove `globalPreload` hook (superseded by `initialize`) (Jacob Smith) #49144
fs:
  * add flush option to writeFile() functions (Colin Ihrig) #50009
  * (SEMVER-MAJOR) add globSync implementation (Moshe Atlow) #47653
http:
  * (SEMVER-MAJOR) reduce parts in chunked response when corking (Robert Nagy) #50167
lib:
  * (SEMVER-MINOR) add WebSocket client (Matthew Aitken) #49830
  * (SEMVER-MAJOR) add `navigator.hardwareConcurrency` (Yagiz Nizipli) #47769
stream:
  * optimize Writable (Robert Nagy) #50012
test_runner:
  * (SEMVER-MAJOR) support passing globs (Moshe Atlow) #47653
vm:
  * use default HDO when importModuleDynamically is not set (Joyee Cheung) #49950

Semver-Major Commits:

* (SEMVER-MAJOR) build: drop support for Visual Studio 2019 (Michaël Zasso) #49051
* (SEMVER-MAJOR) build: bump supported macOS and Xcode versions (Michaël Zasso) #49164
* (SEMVER-MAJOR) crypto: do not overwrite \_writableState.defaultEncoding (Tobias Nießen) #49140
* (SEMVER-MAJOR) deps: bump minimum ICU version to 73 (Michaël Zasso) #49639
* (SEMVER-MAJOR) deps: update V8 to 11.8.172.13 (Michaël Zasso) #49639
* (SEMVER-MAJOR) deps: update llhttp to 9.1.2 (Paolo Insogna) #48981
* (SEMVER-MAJOR) events: validate options of `on` and `once` (Deokjin Kim) #46018
* (SEMVER-MAJOR) fs: adjust `position` validation in reading methods (Livia Medeiros) #42835
* (SEMVER-MAJOR) fs: add globSync implementation (Moshe Atlow) #47653
* (SEMVER-MAJOR) http: reduce parts in chunked response when corking (Robert Nagy) #50167
* (SEMVER-MAJOR) lib: mark URL/URLSearchParams as uncloneable and untransferable (Chengzhong Wu) #47497
* (SEMVER-MAJOR) lib: remove aix directory case for package reader (Yagiz Nizipli) #48605
* (SEMVER-MAJOR) lib: add `navigator.hardwareConcurrency` (Yagiz Nizipli) #47769
* (SEMVER-MAJOR) lib: runtime deprecate punycode (Yagiz Nizipli) #47202
* (SEMVER-MAJOR) module: harmonize error code between ESM and CJS (Antoine du Hamel) #48606
* (SEMVER-MAJOR) net: do not treat `server.maxConnections=0` as `Infinity` (ignoramous) #48276
* (SEMVER-MAJOR) net: only defer \_final call when connecting (Jason Zhang) #47385
* (SEMVER-MAJOR) node-api: rename internal NAPI\_VERSION definition (Chengzhong Wu) #48501
* (SEMVER-MAJOR) src: update NODE\_MODULE\_VERSION to 120 (Michaël Zasso) #49639
* (SEMVER-MAJOR) src: throw DOMException on cloning non-serializable objects (Chengzhong Wu) #47839
* (SEMVER-MAJOR) src: throw DataCloneError on transfering untransferable objects (Chengzhong Wu) #47604
* (SEMVER-MAJOR) stream: use private properties for strategies (Yagiz Nizipli) #47218
* (SEMVER-MAJOR) stream: use private properties for encoding (Yagiz Nizipli) #47218
* (SEMVER-MAJOR) stream: use private properties for compression (Yagiz Nizipli) #47218
* (SEMVER-MAJOR) test\_runner: disallow array in `run` options (Raz Luvaton) #49935
* (SEMVER-MAJOR) test\_runner: support passing globs (Moshe Atlow) #47653
* (SEMVER-MAJOR) tls: use `validateNumber` for `options.minDHSize` (Deokjin Kim) #49973
* (SEMVER-MAJOR) tls: use validateFunction for `options.checkServerIdentity` (Deokjin Kim) #49896
* (SEMVER-MAJOR) util: runtime deprecate `promisify`-ing a function returning a `Promise` (Antoine du Hamel) #49609
* (SEMVER-MAJOR) vm: freeze `dependencySpecifiers` array (Antoine du Hamel) #49720

PR-URL: #49870
Co-authored-by: Michaël Zasso <targos@protonmail.com>
alexfernandez pushed a commit to alexfernandez/node that referenced this pull request Nov 1, 2023
Refs: nodejs/performance#57

PR-URL: nodejs#50167
Reviewed-By: Stephen Belanger <admin@stephenbelanger.com>
Reviewed-By: Matteo Collina <matteo.collina@gmail.com>
Reviewed-By: Yagiz Nizipli <yagiz@nizipli.com>
alexfernandez pushed a commit to alexfernandez/node that referenced this pull request Nov 1, 2023
Notable Changes:

doc:
  * promote fetch/webstreams from experimental to stable (Steven) nodejs#45684
esm:
  * use import attributes instead of import assertions (Antoine du Hamel) nodejs#50140
  * --experimental-default-type flag to flip module defaults (Geoffrey Booth) nodejs#49869
  * remove `globalPreload` hook (superseded by `initialize`) (Jacob Smith) nodejs#49144
fs:
  * add flush option to writeFile() functions (Colin Ihrig) nodejs#50009
  * (SEMVER-MAJOR) add globSync implementation (Moshe Atlow) nodejs#47653
http:
  * (SEMVER-MAJOR) reduce parts in chunked response when corking (Robert Nagy) nodejs#50167
lib:
  * (SEMVER-MINOR) add WebSocket client (Matthew Aitken) nodejs#49830
  * (SEMVER-MAJOR) add `navigator.hardwareConcurrency` (Yagiz Nizipli) nodejs#47769
stream:
  * optimize Writable (Robert Nagy) nodejs#50012
test_runner:
  * (SEMVER-MAJOR) support passing globs (Moshe Atlow) nodejs#47653
vm:
  * use default HDO when importModuleDynamically is not set (Joyee Cheung) nodejs#49950

Semver-Major Commits:

* (SEMVER-MAJOR) build: drop support for Visual Studio 2019 (Michaël Zasso) nodejs#49051
* (SEMVER-MAJOR) build: bump supported macOS and Xcode versions (Michaël Zasso) nodejs#49164
* (SEMVER-MAJOR) crypto: do not overwrite \_writableState.defaultEncoding (Tobias Nießen) nodejs#49140
* (SEMVER-MAJOR) deps: bump minimum ICU version to 73 (Michaël Zasso) nodejs#49639
* (SEMVER-MAJOR) deps: update V8 to 11.8.172.13 (Michaël Zasso) nodejs#49639
* (SEMVER-MAJOR) deps: update llhttp to 9.1.2 (Paolo Insogna) nodejs#48981
* (SEMVER-MAJOR) events: validate options of `on` and `once` (Deokjin Kim) nodejs#46018
* (SEMVER-MAJOR) fs: adjust `position` validation in reading methods (Livia Medeiros) nodejs#42835
* (SEMVER-MAJOR) fs: add globSync implementation (Moshe Atlow) nodejs#47653
* (SEMVER-MAJOR) http: reduce parts in chunked response when corking (Robert Nagy) nodejs#50167
* (SEMVER-MAJOR) lib: mark URL/URLSearchParams as uncloneable and untransferable (Chengzhong Wu) nodejs#47497
* (SEMVER-MAJOR) lib: remove aix directory case for package reader (Yagiz Nizipli) nodejs#48605
* (SEMVER-MAJOR) lib: add `navigator.hardwareConcurrency` (Yagiz Nizipli) nodejs#47769
* (SEMVER-MAJOR) lib: runtime deprecate punycode (Yagiz Nizipli) nodejs#47202
* (SEMVER-MAJOR) module: harmonize error code between ESM and CJS (Antoine du Hamel) nodejs#48606
* (SEMVER-MAJOR) net: do not treat `server.maxConnections=0` as `Infinity` (ignoramous) nodejs#48276
* (SEMVER-MAJOR) net: only defer \_final call when connecting (Jason Zhang) nodejs#47385
* (SEMVER-MAJOR) node-api: rename internal NAPI\_VERSION definition (Chengzhong Wu) nodejs#48501
* (SEMVER-MAJOR) src: update NODE\_MODULE\_VERSION to 120 (Michaël Zasso) nodejs#49639
* (SEMVER-MAJOR) src: throw DOMException on cloning non-serializable objects (Chengzhong Wu) nodejs#47839
* (SEMVER-MAJOR) src: throw DataCloneError on transfering untransferable objects (Chengzhong Wu) nodejs#47604
* (SEMVER-MAJOR) stream: use private properties for strategies (Yagiz Nizipli) nodejs#47218
* (SEMVER-MAJOR) stream: use private properties for encoding (Yagiz Nizipli) nodejs#47218
* (SEMVER-MAJOR) stream: use private properties for compression (Yagiz Nizipli) nodejs#47218
* (SEMVER-MAJOR) test\_runner: disallow array in `run` options (Raz Luvaton) nodejs#49935
* (SEMVER-MAJOR) test\_runner: support passing globs (Moshe Atlow) nodejs#47653
* (SEMVER-MAJOR) tls: use `validateNumber` for `options.minDHSize` (Deokjin Kim) nodejs#49973
* (SEMVER-MAJOR) tls: use validateFunction for `options.checkServerIdentity` (Deokjin Kim) nodejs#49896
* (SEMVER-MAJOR) util: runtime deprecate `promisify`-ing a function returning a `Promise` (Antoine du Hamel) nodejs#49609
* (SEMVER-MAJOR) vm: freeze `dependencySpecifiers` array (Antoine du Hamel) nodejs#49720

PR-URL: nodejs#49870
Co-authored-by: Michaël Zasso <targos@protonmail.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
author ready PRs that have at least one approval, no pending requests for changes, and a CI started. commit-queue-squash Add this label to instruct the Commit Queue to squash all the PR commits into the first one. http Issues or PRs related to the http subsystem. needs-benchmark-ci PR that need a benchmark CI run. needs-ci PRs that need a full CI run. notable-change PRs with changes that should be highlighted in changelogs. review wanted PRs that need reviews. semver-major PRs that contain breaking changes and should be released in the next major version.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

8 participants