Node.js 12 发布!更快启动速度、默认 TLS 1.3

阅读数:4947 2019 年 4 月 24 日

今天,Node 官方团队发布博文宣布,Node.js 12 大版本正式发布。这也是 Node 进入半年大版本发布周期后的一次常规升级。本次发布的重要特性包括:更快的启动速度、最好的默认堆内存分配,以及对 V8、TLS、llhttp 的升级。

Node.js 12 将取代 v11 版本进入当前发布线(current release),并将在 2019 年 10 月发布 v13 版后成为长期支持版本(LTS)。

V8 引擎升级

v12 版本中,V8 引擎从 7.2 版升级到 7.4 版,带来的重要改进包括:

  • 异步堆栈跟踪
  • 参数不匹配更快报错
  • 更快的 await
  • 更快的 JavaScript 渲染等。

默认支持 TLS 1.3

Node.js 12 将支持 TLS 1.3,并将其作为默认的传输加密协议,在需要时也可通过 CLI/NODE_OPTIONS 取消。

TLS 1.3 是 TLS 协议的重大升级,相对 TLS 1.2 有多项安全改进,你应该尽可能的用 1.3 版本取代 1.2 版。

更恰当的堆内存分配

这个特性将自动根据可用内存情况来分配 Node 的堆内存,而之前它是由 V8 根据浏览器的场景而定制的。熟悉 Node 的人可能知道,这个限制通常是 700MB 或 1400MB(分别在 32 位和 64 位系统)。更智能的分配堆内存,可用让 Node 在可用内存不多的情况下使用更少的内存,或者当内存耗尽时自主终止。

这个特性在处理大型数据集时特别有用。当然,你仍然可以像以前一样,使用 max-old-space-size 来设置需要的值。

从 http parser 迁移到 llhttp

Node.js 12 将从默认的 http 渲染器迁移到 llhttp,以前的默认 http_parser 因为代码混乱难以维护,因此 llhttp 作者另建了一个项目来继续开发,它使用 TypeScript 来编写。llhttp 从 Node 11.2 版本作为实验特性引入,现在它可正式使用了。

工作线程(Worker Threads)

工作线程在 Node.js 12 里仍然是一个实验特性,官方团队在持续的对它进行改进,现在你不用设置一个 flag 就可以使用它,并且官方团队宣称它离成为正式特性已经不远了。这个特性在 Node 社区已经被呼唤多时了,它基于 Web Worker API 封装而来,可能为我们带来线程池能力,可以更好的利用多核,Node 压榨性能的能力也将越来越强了。你可以在这里看到对 Node 工作线程的初级介绍:

https://medium.com/@Trott/using-worker-threads-in-node-js-80494136dbb6

诊断报告

Node.js 12 带来一个新的实验特性,诊断报告。它可以让你按需生成,或者在某些事件发生时生成一份报告。报告将包含可以帮助诊断诸如崩溃、性能变差、内存泄漏、高 CPU 使用率等线上问题的有效信息,下面这篇文章对其进行了介绍:

https://medium.com/the-node-js-collection/easily-identify-problems-in-node-js-applications-with-diagnostic-report-dc82370d8029

堆内存 dump

以前如果你需要将堆内存生成 dump 文件,你需要在生产环境安装一些模块,现在 Node.js 12 集成了堆内存 dump 功能,它来自 V8 对 heapdump 的支持,以及对 node-heap 模块的兼容。你可以查看文档来了解如何使用。

启动速度改进

在 Node.js 11 中主要是对热启动速度的改进,通过代码缓存方式,提升从主线程启动工作线程,或者将工作线程的缓存重用到主线程的性能,性能测试显示它提升了工作线程高达 60% 的启动速度。

在 Node.js 12 中,Node 可执行程序将在构建时为内建库生成代码缓存,并嵌入到二进制代码中,这可以让 Node 主线程的冷启动速度提升高达最多 30%,是非常值得注目的性能改进。

ES6 模块支持

Node.js 12 改进了对 ES6 模块的实验性支持,这是一项重要的改进,官方希望得到更多的开发者反馈。

现在你可以通过 Node 官网升级,更多信息可参考 Node 在 Github 上的发布文档。

收藏

评论

微博

发表评论

注册/登录 InfoQ 发表评论