Node.js 20.13 LTS 发布:base64 性能提升、watch 标记为稳定、内存泄漏回归测试方法...

2024-05-21 15:35:21 浏览数 (2)

buffer: 提高 base64 和 base64url 的性能

base64 和 base64url 编码和解码功能的性能显著提高。

crypto: 弃用隐式缩短的 GCM 标签

本次发布引入了仅限文档的弃用通知,不再推荐使用比密码块大小更短的 GCM 认证标签,除非用户指定了 authTagLength 选项。

events, doc: 标记 CustomEvent 为稳定

从本次发布开始,CustomEvent 被标记为稳定。

fs: 在 fs/promises 中添加堆栈跟踪

fs 的同步函数在抛出错误时包含堆栈跟踪信息,这有助于调试。但 fs/promises 中的函数抛出错误时没有堆栈跟踪信息。此提交通过调用 Error.captureStacktrace 并重新抛出错误,添加了堆栈跟踪。

report: 添加 --report-exclude-network 选项

新选项 --report-exclude-network,也可作为 report.excludeNetwork 使用,使用户能够在诊断报告中排除网络接口。在某些系统上,这可以优化报告生成时间,因为生成报告可能需要几分钟。

src: 在报告和进程中添加 uv_get_available_memory

从本次发布开始,可以通过调用 process.getAvailableMemory() 获取系统中的可用内存。

stream: 支持类型化数组

此提交添加了对流中类型化数组的支持。

util: 支持在 util.styleText 中使用格式数组

现在可以向 util.styleText 传递格式字符串数组,以对相同文本应用多种格式。

代码语言:javascript复制
console.log(
  util.styleText(['underline', 'italic'], 'My italic underlined message')
);

v8: 实现用于内存泄漏回归测试的 v8.queryObjects()

这类似于 Chromium DevTools 控制台提供的 queryObjects() 控制台 API。它可以在一次完整的垃圾回收后,搜索堆中原型链上具有匹配构造函数的对象,这对内存泄漏回归测试非常有用。为了避免意外结果,用户应避免在自己无法控制实现的构造函数或可能被应用程序中的其他方调用的构造函数上使用此 API。

为了避免意外泄漏,此 API 不返回找到对象的原始引用。默认情况下,它返回找到对象的数量。如果 options.format 是 'summary',则返回一个包含每个对象简要字符串表示的数组。此 API 提供的可见性类似于堆快照,同时用户可以节省序列化和解析的成本,并在搜索期间直接过滤目标对象。

我们在测试套件中内部使用此 API,比任何其他 CI 中的泄漏回归测试策略更稳定。通过公共实现,我们现在可以使用公共 API。

代码语言:javascript复制
const { queryObjects } = require('node:v8');
class A {
  foo = 'bar';
}
console.log(queryObjects(A)); // 0
let a = new A();
console.log(queryObjects(A)); // 1
// [ "A { foo: 'bar' }" ]
console.log(queryObjects(A, { format: 'summary' }));

// Release the object.
a = null;
// Search again. queryObjects() includes a full garbage collection
// so a should disappear.
console.log(queryObjects(A)); // 0

class B extends A {
  bar = 'qux';
}
// The child class B's prototype has A's prototype on its prototype chain
// so the prototype object shows up too.
console.log(queryObjects(A, { format: 'summary' })); // [ A {}' ]

watch: 标记为稳定

从本次发布开始,Watch 模式被视为稳定。当处于 Watch 模式时,被监视文件的更改会导致 Node.js 进程重启。

本文内容来自 Node.js 官方发布博客 https://nodejs.org/en/blog/release/v20.13.0

- END -

0 人点赞