node 更新_Node.js 12中的新特性

f6e50bfe143440ad96e0770e8ab018c0.png
本文简要翻译了“Node.js Foundation”的Medium博客内容。
原博客由 Bethany Griggs 和 Michael Dawson 撰写,其他贡献来自 Node.js Release Team 和技术指导委员会。


我们很高兴在今天发布 Node.js 12。 重大更新和特性包括: 启动更快、更合理的默认堆限制、对V8内核及LTS的更新、引入llhtp,以及诊断报告、堆转储能力、Worker Threads更新、N-API和ES6模块支持的新特性。Node.js 12作为V11的替代。且将在2019年10月成为LTS版本(更多LTS策略的细节请看这里)。

V8内核更新:升级到V8.7.4版本

更新新版本的V8引擎一如既往的带来新的性能提升和改进,同时也可以让Node.js及时跟进语言和运行时层面的新改进。主要包括:

  • Async stack traces:https://v8.dev/blog/v8-release-72#async-stack-traces
  • Faster calls with arguments mismatch:https://v8.dev/blog/v8-release-74#faster-calls-with-arguments-mismatch
  • Faster await: https://v8.dev/blog/v8-release-73#faster-await
  • Faster javascript parsing: https://v8.dev/blog/v8-release-72#javascript-parsing

请在V8官方博客上阅读更多信息。

TLS 1.3支持

Node.js 12引入了TLS1.3版本支持,并作为TLS默认开启的最高版本。支持通过CLI/NODE_OPTIONS 开关关闭。
TLS1.3是 TLS 协议的主要更新,带了许多安全性增强,应该尽可能优先使用1.3而不是之前的版本。


TLS1.3变化非常大,虽然OpenSSL API在协商 TLS1.3时是API/ABI兼容的。但对协议记录和回调的计时更改打破了硬编码到'tls'模块的假设。 在协商 TLS1.2时,此更改不会带来API的不兼容。 这方便将其移植到当前版本和 LTS 发行版本中,并将这些版本中默认最大 TLS 协议重置为"TLSv1.2"。 也允许这些版本的用户在需要的情况下显式启用 TLS1.3。 如果你想了解更多,你可以看看这些相关的文章: https://developer.ibm.com/blogs/openssl-111-has-landed-in-nodejs-master-and-why-its-important-for-nodejs-lts-releases/ , https://developer.ibm.com/blogs/tls13-is-coming-to-nodejs/

Properly configure default heap limits

这次更新将根据可用内存配置JavaScript默认堆大小,而不是V8引擎在浏览器中使用时的默认配置。在之前的发行版中,V8默认堆在32位和64位平台上分别被配置为700MB和1400MB。根据可用内存大小配置堆内存可以确保Node.js尽可能小的使用内存,且在内存耗尽时能正确的终止。


这在处理大型数据集时特别有用。 与以前一样,如果默认值不适合您的应用程序,仍然可以设置 --max-old-space-size 以使用不同的限制。

Switch default http parser to llhttp
Node.js 12将默认 http 解析器切换为 llhttp。这会使测试和比较新的基于 llhttp 的实现时更加容易。 llhttp在V11.2.0作为实验特性引入,在本次更新中将成为正式特性。

简化本地模块开发--持续更新中

Node.js 12继续推进让本地模块的构建和支持变得更加简单。 本次更新包括更好的本地模块与Worker Threads协作。以及 N-API ( https://nodejs.org/api/N-API.html#n_api_n_api ) version 4(也已经被移植到8. x 和10.x) ,这使得使用独立线程执行本地异步函数变得更加容易。 你可以在这篇伟大的文章中阅读更多关于这方面的内容,以及如何在你的模块中利用这些特性。 https://medium.com/the-node-js-collection/new-features-bring-native-add-ons-close-to-being-on-par-with-js-modules-cd4f9b8e4b4

Worker Threads

Worker Threads (https://nodejs.org/api/worker_threads.html)是一个快速更新的模块,不是新特性。本版本中不再需要flag就可以直接使用Worker Threads,它渐渐的将被移除实验状态。Node.js中已经有很好的单线程的事件循环,但某些场景下使用额外的线程会有更好的效果。我们很期待你尝试这个功能,并给我们一些反馈。这里有一个非常好的快速简介:https://medium.com/@Trott/using-worker-threads-in-node-js-80494136dbb6.

Diagnostic Reports

Node.js 12带来一个新的实验特性“诊断报告(Aka Diagnostic report)”。这允许你在需要的时候或者特定事件发生时生成一份报告。报告包含的信息可以让你快速在生产环境定位诸如崩溃、低性能、内存泄露、高CPU使用、未预料的错误等问题。 这篇文章非常赞:https://medium.com/the-node-js-collection/easily-identify-problems-in-node-js-applications-with-diagnostic-report-dc82370d8029。

Heap Dumps

你可能遇到过需要生成heap dump来调查内存问题,但不得在生产环境中安装一个新模块,整个流程非常漫长。好消息是 Node.js 12带来了内置堆转储功能。 你可以查看 https://github.com/nodejs/node/pull/27133和 https://github.com/nodejs/node/pull/26501的文档来了解更多信息。

Startup Improvements
在 Node.js 11中,我们为 workers 提供了内置的代码缓存支持ーー在加载用 JavaScript 编写的内置库时,如果该库以前是在主线程上编译的,那么工作线程就不再需要从头编译它,可以重用主线程生成的 V8代码缓存来加速编译。 类似地,主线程可以重用工作线程生成的缓存。 Worker启动时接近提升了60%。


现在,在Node.js 12中,我们在构建时提前为内置库生成代码缓存,并将其嵌入到二进制文件中,因此在最终版本中,主线程可以使用代码缓存加速任何用 JavaScript 编写的内置库的初始加载。 这使得主线程的启动时间提升了大约30% 。

ES6 Module Support

Node.js 12 为实验版本的ES6 modules带来了新的更新。这是获得最终实现的一个重要步骤,我们期待您尝试并给我们反馈。更多细节请查阅这篇文章。

New compiler and platform minimums

Node.js 和V8继续拥抱C++新特性,并充分利用其新的编译优化和安全性增强。Node.js 12中,整个代码库在macOS和windows之外的平台上最低要求GCC6和glibc 2.17。http://nodejs.org上放出的二进制release文件也使用了这个工具链要求,因此也包含了新的编译时性能和安全性增强。

对于编译器和libc最小版本的增加也增加了操作系统版本的最小支持版本。使用glibc的平台(大多数除了macOS和Windows外的平台)最低要求glibc 2.17及以上。符合这一条件的常见的Linux平台包括Enterprise Linux7(RHEL 和 CentOS),Debian8 和Ubuntu 14.04。http://nodejs.org上的二进制文件将兼容这些操作系统。 其他不支持GCC6的平台用户需要自己编译二进制文件。尽管Node.js 12.0.0可能可以在老的编译器下可以通过,在可以可以预见的将来,即成为LTS之前的这段时间,Node.js 12的代码库(包括V8)会迅速的采用GCC6支持的C++特性。


最低要求和 Node.js 11一样,需要至少 Windows 7,2008 r 2或者2012 r 2,以及 至少Visual Studio 2017 编译器。 macOS用户编译 Node.js需要至少 Xcode 8及以上,而在 http://Node.js.org 上提供的 Node.js 二进制文件只支持 macOS 10.10"Yosemite"及以后版本。
详细信息请参阅 Node.js BUILDING.md。

Thank you!
非常感谢参与这个版本的所有人。无论你是提交了一个拉请求,帮助我们进行基准测试,还是你负责其中一个版本。 还要感谢 Node.js 构建工作组确保我们拥有创建和测试发布版本的基础设施。 Node.js 12的发布负责人是 Bethany Griggs。 要获得发布团队成员的完整列表,请访问这里。 也可以在这里阅读完整的功能列表。
如果你有兴趣为 Node.js 做贡献,我们欢迎你。 可以通过我们的贡献者指南了解更多信息。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值