Node.js 12 发布!来看看有哪些新动向吧
Node.js 12 介绍
翻译自 Medium 翻译不完整,如有需要请参考原文。
本文由 Bethany Griggs 以及 Michael Dawson 撰写,并由 Node.js Release Team 和 Technical Steering committee 提供帮助。
今天我们非常激动地发布了 Node.js 12。值得注意的更新以及新功能包括更快速的启动、更好的默认堆内存限制、更新 V8 引擎、TLS、llhttp,新功能包括诊断报告、捆绑的 heap dump 功能、Worker Threads 的升级, N-API 和 ES6 module 支持等。(更多细节参见 LTS strategy).
V8 升级到 7.4
像以往一样,新版本的 V8 JavaScript 引擎带来了性能调整与提升,同时也使得 Node.js 跟上了语言与 runtime 持续提升的步伐。其中的亮点包括:
更多 V8 信息请参见 官方博客
Hello TLS 1.3
Node.js 12 将会包含对 TLS 1.3 的支持,并会将其作为默认的最高支持协议,当然同时也支持通过使用 CLI/NODE_OPTIONS 在需要时禁用。
更合适的默认堆内存限制
此次更新将会使得 JavaScript 的堆内存限制根据当前可用内存进行配置,而不是使用之前为浏览器中 V8 适配的默认值。此前的版本中,除非是手动配置,不然 V8 会使用默认的的方案(32位系统上是 700MB 的限制,64位系统则是 1400MB)。根据可用内存来配置堆内存限制确保了 Node.js 不会因为使用超出可用内存而导致异常退出。
这在处理大型数据集时特别有用。和以前一样,如果默认值不适合您的应用程序,通过设置 max-old-space-size 仍然可以使用不同的限制。
使用 llhttp 替换了默认的 http 解析器
Node.js 12也将把默认解析器切换到 llhttp。llhttp 在 v11.2.0 中首次作为llhttp experimental 引入,在此版本中,llhttp 将不再作为 experimental。
更容易的 Native 模块 —— 持续进行中
Node.js 12 使得构建 Native 模块更加容易。更新使得 Worker threads 与 Native 模块的结合得到了更好的支持,并且 N-API 的 version 4 也将使得用户构建基于自己的线程的异步函数更加方便。更多详情请参考此文章。
Worker Threads
Worker Threads 虽然不是新的功能,但是该版本中我们仍可以看到一些新的进展。现在使用 Worker Threads 已经不再需要 flag 了,并且该功能也在不断更新,并朝着摆脱实验性标签的方向稳步前进。虽然借助 Node.js 的单线程事件循环模型,我们已经得到了足够好的性能,但是在某些情况下,使用 Worker Threads 却能带来更好的效果。
诊断报告
Node.js 12 带来了一个新的实验功能:“诊断报告”。这允许您按需或在某些事件发生时生成报告。此报告包含有助于诊断生产中问题的信息,包括崩溃、性能低下、内存泄漏、高CPU使用率、意外错误等。详情参考此文章。
Heap Dumps
如果您曾经需要生成 Heap Dumps 来调查内存问题,但是又不得不将诊断模块安装到生产环境中导致运行速度变慢,那么好消息是Node.js 12带来了集成的 Heap Dumps 功能。参考https://github.com/nodejs/node/pull/27133 以及 https://github.com/nodejs/node/pull/26501 获取更多信息。
启动时间优化
在Node.js 11中,我们为 workers 提供了内置代码缓存支持,在加载 js 脚本时,如果引用的库代码已经在主线程上编译过了,那么工作线程不再需要从头编译,而是可以重用主线程生成的 v8 代码缓存来加速编译。类似地,主线程可以重用 workers 生成的缓存。这使得 workers 的创建速度提高了大约 60%。
现在在 Node.js 12 中,我们在构建时预先为内置库生成代码缓存,并将其嵌入二进制文件中,因此在最终版本中,主线程可以使用代码缓存来启动任何用 JavaScript 编写的内置库的初始加载。这使得主线程的启动时间加快了约30%。
ES6 Module 支持
Node.js 12 带来了支持 ES6 Module 的最新实验版本。这是迈向正式支持的重要一步,我们希望您尝试一下并给我们反馈。更多细节请看这篇文章。
新的编译器和最小化平台
Node.js 和 V8 继续支持更新的 C 与 C++ 功能,并且充分利用了新编译器的优化与安全增强。随着 Node.js 12 的发布,代码库现在要求在除了 macOS 和 Windows 之外的平台上至少有 GCC 6 和 glibc 2.17。Node.js 发布的二进制文件使用了这个新的最小工具链,因此包含了新的编译时性能和安全性增强。
有关构建的详情请参阅 BUILDING.md。
--------------- THE END ----------------