显著变化
流性能改进
改进了可写和可读流的性能,将创建和销毁性能提高了 ±15%,并减少了 Node.js 中每个流占用的内存开销
由 Benjamin Gruenbaum 在 #49745 和 Raz Luvaton 在 #49834 中贡献。
改进可读网络流的性能,将可读流异步迭代器消耗量提高 ±140%,将可读流管道消耗量提高 ±60%。
由 Raz Luvaton 在 #49662 和 #49690 中贡献。
使用 importModuleDynamically 选项重做 vm API 中的内存管理
本次重做解决了以下支持 importModuleDynamically 的 API 中一系列长期存在的内存泄露和使用后释放问题:
vm.Script
vm.compileFunction
vm.SyntheticModule
vm.SourceTextModule
这将使受影响的用户能够从旧版本的 Node.js 升级。
由 Joyee Cheung 在 #48510 中提供。
其他显著变更
[32d4d29d02] – deps: add v8::Object::SetInternalFieldForNodeCore() (Joyee Cheung) #49874
[0e686d096b] – doc:弃用fs.F_OK、fs.R_OK、fs.W_OK、fs.X_OK (Livia Medeiros) #49683
[a5dd057540] – doc:弃用 util.toUSVString (Yagiz Nizipli) #49725
[7b6a73172f] – doc:废弃在返回 promise 的函数上调用 promisify (Antoine du Hamel) #49647
[1beefd5f16] – esm:将所有钩子设置为候选发布版本 (Geoffrey Booth) #49597
[b0ce78a75b] – 模块:修复 SourceTextModule 和 ContextifySript 中的漏洞 (Joyee Cheung) #48510
[4e578f8ab1] – 模块:修复 vm.SyntheticModule 的泄漏(Joyee Cheung) #48510
[69e4218772] – 模块:使用 WeakMap 中的符号来管理主机定义的选项(Joyee Cheung) #48510
[14ece0aa76] – (SEMVER-MINOR) src:允许嵌入者覆盖 NODE_MODULE_VERSION (Cheng Zhao) #49279
[9fd67fbff0] – 流:在可写状态下使用位图(Raz Luvaton) #49834
[0ccd4638ac] – 流:在可读状态下使用位图(Benjamin Gruenbaum) #49745
[7c5e322346] – 流:提高网络流可读异步迭代器性能(Raz Luvaton) #49662
[80b342cc38] – (SEMVER-MINOR) test_runner:在运行中接受 testOnly (Moshe Atlow) #49753
[17a05b141d] – (SEMVER-MINOR) test_runner:添加 junit 报告(Moshe Atlow) #49614
提交
[4879e3fbbe] – 基准:为可读流的 read() 添加一个基准(Debadree Chatterjee) #49622
[78a6c73157] – benchmark:通过减少块的数量来缩短 pip-to (Raz Luvaton) #49577
[4126a6e4c9] – 基准:修复网络流管到管(Raz Luvaton) #49552
[6010a91825] – bootstrap:快照时不扩展 argv1 (Joyee Cheung) #49506
[8480280c4b] – bootstrap:编译代码缓存时只使用隔离快照 (Joyee Cheung) #49288
[b30754aa87] – 联编:使用节点可执行文件运行 embedtest (Joyee Cheung) #49506
[31db0b8e2b] – 联编:在 configure.py 中添加 –write-snapshot-as-array-literals (Joyee Cheung) #49312
[6fcb51d3ba] – 调试器:使用 internal/url.URL 代替 url.parse (LiviaMedeiros) #49590
[32d4d29d02] – 部署:添加 v8::Object::SetInternalFieldForNodeCore() (Joyee Cheung) #49874
[ad37cadc3f] – deps:V8: backport de9a5de2274f (Joyee Cheung) #49703
[cdd1c66222] – 数据库:V8: cherry-pick b33bf2dfd261 (Joyee Cheung) #49703
[61d18d6473] – 版本:更新 undici 至 5.24.0 (Node.js GitHub Bot) #49559
[b8a4fef393] – 文件:从 uv.gyp 中移除 pthread-fixes.c (Ben Noordhuis) #49744
[6c86c0683c] – 文件:将 googletest 更新至 d1467f5 (Node.js GitHub Bot) #49676
[1424404742] – 部署:更新 nghttp2 至 1.56.0(Node.js GitHub 僵尸程序) #49582
[15b54ff95d] – 文件:将 googletest 更新至 8a6feab (Node.js GitHub Bot) #49463
[2ceab877c2] – 文件:将 corepack 更新至 0.20.0 (Node.js GitHub Bot) #49464
[4814872ddc] – doc:修复 DEP0176 编号 (LiviaMedeiros) #49858
[0e686d096b] – doc: 废弃fs.F_OK,fs.R_OK,fs.W_OK,fs.X_OK (Livia Medeiros) #49683
[5877c403a2] – doc:添加 mertcanaltin 为 triager (mert.altin) #49826
[864fe56432] – doc:在后向移植指南中添加 git 节点后向移植方式 (Raz Luvaton) #49760
[e0f93492d5] – doc:改进关于 ICU 数据回退的文档(Joyee Cheung) #49666
[a5dd057540] – doc:废弃 util.toUSVString (Yagiz Nizipli) #49725
[774c1cfd52] – doc:为 util.promisify 的示例添加缺失的函数调用 (Jungku Lee) #49719
[fe78a34845] – doc:更新 mimeParams.set() 示例的输出 (Deokjin Kim) #49718
[4175ea33bd] – doc:在示例中添加使用 numericSeparator 的漏检 (Deokjin Kim) #49717
[3a88571972] – doc:修复历史注释 (Antoine du Hamel) #49701
[db4ab1ccbb] – doc:为 import.meta.resolve 添加缺失的历史信息 (Antoine du Hamel) #49700
[a304d1ee19] – doc:将维护部署链接到 pull-request.md (Marco Ippolito) #49716
[35294486ad] – doc:修复事件中的打印结果 (Jungku Lee) #49548
[9f0b0e15c9] – doc:按字母顺序排列 cli.md 部分 (Geoffrey Booth) #49668
[7b6a73172f] – doc:废弃在返回 promise 的函数上调用 promisify (Antoine du Hamel) #49647
[d316b32fff] – doc:更新 corepack.md 以适应 0.20.0 的变化 (Antoine du Hamel) #49486
[c2eac7dc7c] – doc:从性能倡议中移除 @anonrig (Yagiz Nizipli) #49641
[3d839fbf87] – doc:将 Node.js 16 标记为生命周期结束 (Richard Lau) #49651
[53fb5aead8] – doc:保存用户对 JS 风格的偏好 (Vidar Eldøy) #49526
[e3594d5658] – doc:更新 node:process warning 的文档 (Shubham Pandey) #49517
[8e033c3963] – doc:重命名可能混淆的变量和 CSS 类 (Antoine du Hamel) #49536
[d0e0eb4bb3] – doc:更新过时的历史信息(Antoine du Hamel) #49530
[b4724e2e3a] – doc:关闭括号(Sébastien Règne) #49525
[0471c5798e] – doc:在 addons.md 中将 GetInternalField() 返回类型改为 v8::Value (Joyee Cheung) #49439
[9f8bea3dda] – doc:修复 child_process 中输入选项的文档 (Ariel Weiss) #49481
[f3fea92f8a] – doc:修复 test.run 代码示例中缺少的导入 (Oshri Asulin) #49489
[e426b77b67] – doc:修复 fs.createWriteStream highWaterMark 选项的文档 (Mert Can Altın) #49456
[2b119108ff] – doc:更新了 node.js 网站的发布者说明 (Claudio W) #49427
[b9d4a80183] – doc:编辑 import.meta.resolve 文档 (Antoine du Hamel) #49247
[f67433f666] – doc,tools: switch to @node-core/utils (Michaël Zasso) #49851
[142e256fc5] – errors:改进 errors.js 中的 classRegExp (Uzlopak) #49643
[6377f1bce2] – errors:在更多错误信息中使用 determineSpecificType (Antoine du Hamel) #49580
[05f0fcb4c4] – esm:识别父级导入无效 host 的 url (Jacob Smith) #49736
[8a6f5fb8f3] – esm:修复 import.meta.resolve 的返回类型 (Antoine du Hamel) #49698
[a6140f1b8c] – esm:更新加载器警告 (Geoffrey Booth) #49633
[521a9327e0] – ESM:修复注册表中对 URL 实例的支持 (Antoine du Hamel) #49655
[3a9ea0925a] – esm:澄清ERR_REQUIRE_ESM错误(Daniel Compton) #49521
[1beefd5f16] – ESM:将所有钩子设置为候选发布版本 (Geoffrey Booth) #49597
[be48267888] – ESM:删除 Module.register 的返回值 (Antoine du Hamel) #49529
[e74a075124] – ESM:重构 test-esm-loader-resolve-type (Geoffrey Booth) #49493
[17823b3533] – esm:重构 test-esm-named-exports (Geoffrey Booth) #49493
[f34bd15ac1] – esm:重构模拟测试 (Geoffrey Booth) #49465
[ec323bbd99] -fs:替换节点文件中的 SetMethodNoSideEffect (CanadaHonk) #49857
[6acf800123] -fs:提高 unlinkSync 的错误性能 (CanadaHonk) #49856
[31702c9403] -fs:使用文件描述符改进 readFileSync (Yagiz Nizipli) #49691
[835f9fe7b9] -fs:修复文件描述符验证器 (Yagiz Nizipli) #49752
[b618fe262f] -fs:提高 opendirSync 的错误性能 (Yagiz Nizipli) #49705
[938471ef55] – fs:提高同步方法的错误性能 (Yagiz Nizipli) #49593
[db3fc6d087] -fs:修复未知文件类型下的 readdir 和 opendir 递归问题 (William Marlow) #49603
[0f020ed22d] – gyp:将 cctest 文件名放入变量(Cheng Zhao) #49178
[0ce1e94d12] – lib:更新 WHATWG API 中的编码集(Jungku Lee) #49610
[efd6815a7a] – lib:修复 internalBinding 类型 (Yagiz Nizipli) #49742
[1287d5b74e] – lib:允许使用 “blob.stream() “的 byob 阅读器 (Debadree Chatterjee) #49713
[bbc710522d] – lib:执行前重置 cwd 缓存 (Maël Nison) #49684
[f62d649e4d] – lib:使用内部 fileURLToPath (Deokjin Kim) #49558
[e515046941] – lib:使用内部 pathToFileURL (Livia Medeiros) #49553
[00608e8070] – lib:在 freeze_intrinsics.js 中检查 SharedArrayBuffer 的可用性 (Milan Burda) #49482
[8bfbe7079c] – 元:修复指针错误 (Antoine du Hamel) #49755
[58f7a9e096] – 元:添加 primordials 战略举措 (Benjamin Gruenbaum) #49706
[5366027756] – 元:将 github/codeql-action 从 2.21.2 升级到 2.21.5 (dependabot[bot]) #49438
[fe26b74082] – 元:将 rtCamp/action-slack-notify 从 2.2.0 升级到 2.2.1 (dependabot[bot]) #49437
[b0ce78a75b] – 模块:修复 SourceTextModule 和 ContextifySript 中的漏洞 (Joyee Cheung) #48510
[4e578f8ab1] – 模块:修复 vm.SyntheticModule 的泄漏(Joyee Cheung) #48510
[69e4218772] – 模块:在 WeakMap 中使用符号来管理主机定义的选项(Joyee Cheung) #48510
[96874e8fbc] – node-api:默认启用未捕获异常策略 (Chengzhong Wu) #49313
[b931aeadfd] – perf_hooks:减少新 performance_entries 的开销 (Vinicius Lourenço) #49803
[ad043bac31] – 进程:为 heapsnapshot-signal 添加自定义目录支持 (Jithil P Ponnan) #47854
[8a7c10194c] – 替换:不要在 .load 中累积多余的缩进 (Daniel X Moore) #49461
[10a2adeed5] – 原始码:改进 ICU 数据无法初始化时的错误信息 (Joyee Cheung) #49666
[ce37688bac] – 原始码:删除不必要的待办事项(Rafael Gonzaga) #49227
[f611583b71] – 原始码:使用 SNAPSHOT_SERDES 记录快照服务器/反序列化(Joyee Cheung) #49637
[a597cb8457] – SRC:将 Pipe 移植到 uv_pipe_bind2、uv_pipe_connect2 (Geoff Goodman) #49667
[fb21062338] – 原始码:明确设置 –rehash-snapshot (Joyee Cheung) #49556
[14ece0aa76] – (SEMVER-MINOR) src:允许嵌入者覆盖 NODE_MODULE_VERSION (Cheng Zhao) #49279
[4b5e23c71b] – src:只设置一次 ModuleWrap 内部字段 (Joyee Cheung) #49391
[2d3f5c7cab] – SRC:修复fs_type_to_name默认值(Mustafa Ateş Uzun) #49239
[cfbcb1059c] – SRC:修正关于 StreamResource 的注释 (rogertyang) #49193
[39fb83ad16] – SRC:不要依赖于内部字段默认为未定义(Joyee Cheung) #49413
[9fd67fbff0] – 流:在可写状态下使用位图(Raz Luvaton) #49834
[0ccd4638ac] – 流:在可读状态下使用位图(Benjamin Gruenbaum) #49745
[b29d927010] – 流:改进可读网络流管道(Raz Luvaton) #49690
[7c5e322346] – stream:提高网络流可读异步迭代器性能(Raz Luvaton) #49662
[be211ef818] – 测试:deflake test-vm-contextified-script-leak (Joyee Cheung) #49710
[355f10dab2] – 测试:在虚拟机泄漏测试中使用 checkIfCollectable (Joyee Cheung) #49671
[17cfc531aa] – 测试:在 test/common/gc.js 中添加 checkIfCollectable (Joyee Cheung) #49671
[e49a573752] – 测试:添加 os setPriority、getPriority 测试覆盖范围(Wael) #38771
[5f02711522] – 测试:deflake test-runner-output (Moshe Atlow) #49878
[cd9754d6a7] – 测试:将 test-runner-output 标记为不稳定 (Joyee Cheung) #49854
[5ad00424dd] – 测试:使用 mustSucceed 代替 mustCall (SiddharthDevulapalli) #49788
[3db9b40081] – 测试:将 test-readline-async-iterators 重构为基准 (Shubham Pandey) #49237
[2cc5ad7859] – Revert “test: mark test-http-regr-gh-2928 as flaky” (Luigi Pinca) #49708
[e5185b053c] – 测试:使用 fs.constants 代替 fs.access constants (Livia Medeiros) #49685
[b9e5b43462] – 测试:deflake test-http-regr-gh-2928 (Luigi Pinca) #49574
[1fffda504e] – 测试:修复 embedtest 中的参数计算(Joyee Cheung) #49506
[6e56f2db52] – 测试:在 Windows 上跳过 test-child-process-stdio-reuse-readable-stdio (Joyee Cheung) #49621
[ab3afb330d] – 测试:将 test-runner-watch-mode 标记为不稳定(Joyee Cheung) #49627
[185d9b50db] – 测试:deflake test-tls-socket-close (Luigi Pinca) #49575
[c70c74a9e6] – 测试:在 test-cli-syntax-require.js 失败时显示更多信息 (Joyee Cheung) #49561
[ed7c6d1114] – 测试:将 test-http-regr-gh-2928 标记为不稳定 (Joyee Cheung) #49565
[3599eebab9] – 测试:在海洋测试中使用 spawnSyncAndExitWithoutError (Joyee Cheung) #49543
[f79b153e89] – 测试:在 test/common/sea.js 中使用 spawnSyncAndExitWithoutError (Joyee Cheung) #49543
[c079c73769] – 测试:在 test-heapdump-shadowrealm.js 中使用 setImmediate() (Joyee Cheung) #49573
[667a92493c] – 测试:在 Windows 上跳过 test-child-process-pipe-dataflow.js (Joyee Cheung) #49563
[91af0a9a3c] – Revert “测试:忽略复制的 entry_point.c” (Chengzhong Wu) #49515
[567afc71b8] – 测试:避免复制测试源文件(Chengzhong Wu) #49515
[ced25a976d] – 测试:增加 Module.register 和初始化钩子的覆盖率 (Antoine du Hamel) #49532
[be02fbdb8a] – 测试:隔离 globalPreload 测试 (Geoffrey Booth) #49545
[f214428845] – 测试:拆分 test-crypto-dh,以避免在 CI 中的慢速机器上超时(Joyee Cheung) #49492
[3987094569] – 测试:使 test-dotenv-node-options 与本地无关(Livia Medeiros) #49470
[34c1741792] – 测试:在 node:fs 中添加 urlstrings 使用测试 (Livia Medeiros) #49471
[c3c6c4f007] – 测试:使 test-worker-prof 更健壮 (Joyee Cheung) #49274
[843df1a4da] – 测试,加密:更新 WebCryptoAPI WPT (Filip Skokan) #49714
[80b342cc38] – (SEMVER-MINOR) test_runner:运行时只接受 testOnly (Moshe Atlow) #49753
[76865515b9] – test_runner:修复无位置参数时的测试运行器观察模式 (Moshe Atlow) #49578
[17a05b141d] – (SEMVER-MINOR) test_runner:添加 junit 报告器 (Moshe Atlow) #49614
[5672e38457] – test_runner:在 mock.js 中添加 jsdocs (Caio Borghi) #49555
[b4d42a8f2b] – test_runner:修复无效的计时器调用 (Erick Wendel) #49477
[f755e6786b] – test_runner:为 MockTimers 添加 jsdocs (Erick Wendel) #49476
[e7285d4bf0] – test_runner:修复 typescript 覆盖范围 (Moshe Atlow) #49406
[07a2e29bf3] – tools:支持手动更新 @reporters/github (Moshe Atlow) #49871
[5ac6722031] – 工具:跳过 tools/node_modules 上的围脖 (Moshe Atlow) #49838
[462228bd24] – 工具:修复 uvwasi 更新器 (Michael Dawson) #49682
[ff81bfb958] – tools:更新 lint-md-dependencies 至 rollup@3.29.2 (Node.js GitHub Bot) #49679
[08ffc6344c] – 工具:限制内部代码使用公共 url 模块 (LiviaMedeiros) #49590
[728ebf6c97] – tools:更新 eslint 至 8.49.0 (Node.js GitHub Bot) #49586
[20d038ffb1] – tools: update lint-md-dependencies to rollup@3.29.0 unified@11.0.3 (Node.js GitHub Bot) #49584
[210c15bd12] – tools:允许在 js2c 中传递 config.gypi 的绝对路径 (Cheng Zhao) #49162
[e341efe173] – 工具:正确配置永不过期标签(Michaël Zasso) #49498
[a8a8a498ce] – 工具:更新文档依赖关系(Node.js GitHub Bot) #49467
[ac06607f9e] – 类型:修复 ExportedHooks 中丢失的属性 (Antoine du Hamel) #49567
[097b59807a] – url:提高无效url性能 (Yagiz Nizipli) #49692
[7c2060cfac] – util:添加 getCwdSafe 内部 util fn (João Lenon) #48434
[c23c60f545] – zlib:禁用 CRC32 SIMD 优化(Luigi Pinca) #49511
Windows 32-bit Installer: https://nodejs.org/dist/v20.8.0/node-v20.8.0-x86.msi
Windows 64-bit Installer: https://nodejs.org/dist/v20.8.0/node-v20.8.0-x64.msi
Windows ARM 64-bit Installer: https://nodejs.org/dist/v20.8.0/node-v20.8.0-arm64.msi
Windows 32-bit Binary: https://nodejs.org/dist/v20.8.0/win-x86/node.exe
Windows 64-bit Binary: https://nodejs.org/dist/v20.8.0/win-x64/node.exe
Windows ARM 64-bit Binary: https://nodejs.org/dist/v20.8.0/win-arm64/node.exe
macOS 64-bit Installer: https://nodejs.org/dist/v20.8.0/node-v20.8.0.pkg
macOS Apple Silicon 64-bit Binary: https://nodejs.org/dist/v20.8.0/node-v20.8.0-darwin-arm64.tar.gz
macOS Intel 64-bit Binary: https://nodejs.org/dist/v20.8.0/node-v20.8.0-darwin-x64.tar.gz
Linux 64-bit Binary: https://nodejs.org/dist/v20.8.0/node-v20.8.0-linux-x64.tar.xz
Linux PPC LE 64-bit Binary: https://nodejs.org/dist/v20.8.0/node-v20.8.0-linux-ppc64le.tar.xz
Linux s390x 64-bit Binary: https://nodejs.org/dist/v20.8.0/node-v20.8.0-linux-s390x.tar.xz
AIX 64-bit Binary: https://nodejs.org/dist/v20.8.0/node-v20.8.0-aix-ppc64.tar.gz
ARMv7 32-bit Binary: https://nodejs.org/dist/v20.8.0/node-v20.8.0-linux-armv7l.tar.xz
ARMv8 64-bit Binary: https://nodejs.org/dist/v20.8.0/node-v20.8.0-linux-arm64.tar.xz
Source Code: https://nodejs.org/dist/v20.8.0/node-v20.8.0.tar.gz
Other release files: https://nodejs.org/dist/v20.8.0/
Documentation: https://nodejs.org/docs/v20.8.0/api/