1. 首页
  2. IT资讯

Node.js 12简介

“u003Cdivu003Eu003Cpu003Eu003Cemu003E本博文由Bethany Griggs和Michael Dawson撰写,Node.js发布团队和技术指导委员会提供了技术内容支持。u003Cu002Femu003Eu003Cu002Fpu003Eu003Cdiv class=”pgc-img”u003Eu003Cimg src=”http:u002Fu002Fp1.pstatp.comu002Flargeu002Fpgc-imageu002F2bb6acde12cf4895a9c803cf54c53d54″ img_width=”1600″ img_height=”1002″ alt=”Node.js 12简介” inline=”0″u003Eu003Cp class=”pgc-img-caption”u003Eu003Cu002Fpu003Eu003Cu002Fdivu003Eu003Cpu003E今天我们很兴奋地宣布Node.js 12发布了。重大的更新和特性包括更快的启动速度和更好的默认堆限制、对V8、TLS、llhttp的更新, 新的特性包括诊断报告、捆绑式堆备份功能和对线程池、N-API和ES6模块支持的更新等等。Node.js 12版本替换了我们当前发布线中的版本11。Node.js发布线将在2019年10月成为Node.js长期支持(LTS)版本(更多关于LTS策略的细节请查看这里)。(https:u002Fu002Fgithub.comu002Fnodejsu002Frelease )u003Cu002Fpu003Eu003Cpu003Eu003Cstrongu003EV8 更新: V8 更新至 V8 7.4u003Cu002Fstrongu003Eu003Cu002Fpu003Eu003Cpu003E一如既往,V8 JavaScript引擎的新版本带来了性能的调优和改进,同时也使Node.js与语言和运行时的不断改进保持一致。更新亮点包括:u003Cu002Fpu003Eu003Culu003Eu003Cliu003E异步堆栈跟踪: https:u002Fu002Fv8.devu002Fblogu002Fv8-release-72#async-stack-traces u003Cu002Fliu003Eu003Cliu003E参数不匹配的更快调用: https:u002Fu002Fv8.devu002Fblogu002Fv8-release-74#faster-calls-with-arguments-mismatch u003Cu002Fliu003Eu003Cliu003E更快的 await: https:u002Fu002Fv8.devu002Fblogu002Fv8-release-73#faster-await u003Cu002Fliu003Eu003Cliu003E更快的 javascript解析: https:u002Fu002Fv8.devu002Fblogu002Fv8-release-72#javascript-parsing u003Cu002Fliu003Eu003Cu002Fulu003Eu003Cpu003E请访问 官方博客获取更多有关V8的信息。(https:u002Fu002Fv8.devu002Fblog )u003Cu002Fpu003Eu003Cpu003Eu003Cstrongu003E你好TLS 1.3u003Cu002Fstrongu003Eu003Cu002Fpu003Eu003Cpu003ENode.js 12引入了TLS1.3支持,并使其成为默认的最大协议,同时还支持CLIu002FNODE_OPTIONS开关,以便在必要时禁用它。u003Cu002Fpu003Eu003Cpu003ETLS1.3是TLS协议的一个重大更新,进行了许多安全性增强,在可能的情况下应优先于TLS1.2来使用。u003Cu002Fpu003Eu003Cpu003ETLS1.3非常不同,以至于在使用TLS1.3时,即使是OpenSSL API在技术上也是APIu002FABI兼容的,但是协议记录和回调时间的更改打破了硬编码到“tls”模块中的假设。在使用TLS1.2时,此更改不会引入API不兼容性。它的目的是将其向后移植到当前和LTS发布线中,并将缺省的最大TLS协议重置为“TLSv1.2”。这将允许那些发布线的用户在需要时显式地启用TLS1.3。如果您想阅读更多内容,请查看以下相关文章: https:u002Fu002Fdeveloper.ibm.comu002Fblogsu002Fopenssl-111-has-landed-in-nodejs-master-and-why-its-important-for-nodejs-lts-releasesu002F , https:u002Fu002Fdeveloper.ibm.comu002Fblogsu002Ftls13-is-coming-to-nodejsu002F 。u003Cu002Fpu003Eu003Cpu003Eu003Cstrongu003E正确配置默认堆限制u003Cu002Fstrongu003Eu003Cu002Fpu003Eu003Cpu003E本次更新将根据可用内存来配置JavaScript堆大小,而不是使用V8为浏览器设置的默认值。在以前的版本中,除非进行了配置,否则V8默认会将32位和64位平台上的最大堆大小分别限制为700 MB或1400MB。根据可用内存配置堆大小可以确保Node.js不会尝试使用超过可用内存的内存,并在内存耗尽时终止运行。u003Cu002Fpu003Eu003Cpu003E这在处理大型数据集时特别有用。与以前一样,如果默认值不适合您的应用程序,你仍然可以设置-max-old-space-size来使用不同的限制。u003Cu002Fpu003Eu003Cpu003Eu003Cstrongu003E将默认http 解析器切换为 llhttpu003Cu002Fstrongu003Eu003Cu002Fpu003Eu003Cpu003ENode.js 12也将把默认解析器切换到llhttp。这将是有益的,因为它将使测试和比较新的基于llhttp的实现更加容易。在v11.2.0中首次引入llhttp实验版本(https:u002Fu002Fgithub.comu002Fnodejsu002Fnodeu002Fpullu002F24059 ),而在本版本中llhttp(https:u002Fu002Fgithub.comu002Findutnyu002Fllhttp )将跳出实验版本。u003Cu002Fpu003Eu003Cpu003Eu003Cstrongu003E使本地模块的构建和支持更容易 — 过程延续u003Cu002Fstrongu003Eu003Cu002Fpu003Eu003Cpu003ENode.js 12延续了使构建和支持本地模块更容易的趋势。其中的更改包括更好地支持与线程池结合的本地模块,以及N-API (https:u002Fu002Fnodejs.orgu002Fapiu002Fn-api.html#n_api_n_api )版本4(也已经被向后移植到8.x和10.x版本),这使得你可以更容易地使用自己的线程来实现本地异步函数。这里有一篇很不错的文章,你可以了解更多关于它的信息,以及如何在你的模块中利用它: https:u002Fu002Fmedium.comu002Fthe-node-js-collectionu002Fnew-features-bring-native-add-ons-close-to-being-on-par-with-js-modules-cd4f9b8e4b4 u003Cu002Fpu003Eu003Cpu003Eu003Cstrongu003E工人线程u003Cu002Fstrongu003Eu003Cu002Fpu003Eu003Cpu003E工人线程(https:u002Fu002Fnodejs.orgu002Fapiu002Fworker_threads.html )虽然在这个版本中并不新鲜,但仍然在不断取得进展。工人线程的使用不再需要使用一个标志,而且它们正朝着跳出实验性质的方向稳步前进。虽然Node.js在单线程事件循环中已经表现得很好,但是在某些用例中,可以利用额外的线程来获得更好的结果。我们希望你能够尝试它们,并让我们知道你有哪些有用的工人线程用例。想要获得工人线程的快速介绍,请查看这篇文章 :https:u002Fu002Fmedium.comu002F@Trottu002Fusing-worker-threads-in-node-js-80494136dbb6 。u003Cu002Fpu003Eu003Cpu003Eu003Cstrongu003E诊断报告u003Cu002Fstrongu003Eu003Cu002Fpu003Eu003Cpu003ENode.js 12 带来了一个新的实验特性——“诊断报告”。这允许你根据需要或在某些特定事件发生时生成一个报告。该报告包含的信息有助于诊断生产环境中的问题,包括崩溃、性能低下、内存泄漏、CPU使用率高、意外错误等等。 请查看这篇文章获取更多信息: https:u002Fu002Fmedium.comu002Fthe-node-js-collectionu002Feasily-identify-problems-in-node-js-applications-with-diagnostic-report-dc82370d8029 。u003Cu002Fpu003Eu003Cpu003Eu003Cstrongu003E堆备份u003Cu002Fstrongu003Eu003Cu002Fpu003Eu003Cpu003E如果你曾经为了研究内存问题而需要生成堆备份,但是由于必须在生产环境中安装一个新模块而降低了速度,那么好消息是Node.js 12提供了现成的集成堆备份功能。你可以查看https:u002Fu002Fgithub.comu002Fnodejsu002Fnodeu002Fpullu002F27133 和 https:u002Fu002Fgithub.comu002Fnodejsu002Fnodeu002Fpullu002F26501 中的文档内容获取更多信息。u003Cu002Fpu003Eu003Cpu003Eu003Cstrongu003E启动速度改进u003Cu002Fstrongu003Eu003Cu002Fpu003Eu003Cpu003E在Node.js 11我们对工人线程提供了内置代码缓存支持——当加载用JavaScript编写的内置库时,如果这些库之前在主线程中编译过, 那么工人线程不再需要从头编译它,而是可以重用由主线程生成的v8代码缓存(https:u002Fu002Fv8.devu002Fblogu002Fcode-caching )加来快编译。类似地,主线程可以重用工人线程生成的缓存。这使得工人线程的启动速度提高了大约60% (https:u002Fu002Fgithub.comu002Fnodejsu002Fnodeu002Fpullu002F24950 )。u003Cu002Fpu003Eu003Cpu003E现在在Node.js 12中,我们在构建库时预先为内置库生成代码缓存(https:u002Fu002Fgithub.comu002Fnodejsu002Fnodeu002Fpullu002F27161 ),并将其嵌入到二进制文件中,因此在最终版本中,主线程可以使用代码缓存来启动任何用JavaScript编写的内置库的初始加载。这使主线程的启动速度提高了30%左右。u003Cu002Fpu003Eu003Cpu003Eu003Cstrongu003EES6 模块支持u003Cu002Fstrongu003Eu003Cu002Fpu003Eu003Cpu003ENode.js 12带来了对ES6模块支持的更新的实验性版本。这是迈向实现支持的重要一步,我们希望你尝试一下并给我们一些反馈。想了解更多细节,请查看这篇很棒的博客文章(https:u002Fu002Fmedium.comu002F@nodejsu002Fannouncing-a-new-experimental-modules-1be8d2d6c2ff )。u003Cu002Fpu003Eu003Cpu003Eu003Cstrongu003E新的编译器和最低平台要求u003Cu002Fstrongu003Eu003Cu002Fpu003Eu003Cpu003ENode.js和V8继续包含更新的C++特性,并利用了更新的编译器优化和安全性增强。随着Node.js 12的发布,代码库现在在除了macOS和Windows之外的平台上至少需要GCC 6和glibc 2.17。Node.js 官网上发布的二进制文件使用了这个新的工具链的最低版本,因此包含了新的编译时性能和安全性增强。u003Cu002Fpu003Eu003Cpu003E最低版本编译器和libc需求的增加也导致了最低支持平台的增加。使用glibc的平台(除macOS和Windows之外的大多数平台)现在必须包含最低版本2.17。与此版本兼容的常见Linux平台包括Enterprise Linux 7 (RHEL和CentOS)、Debian 8和Ubuntu 14.04。从nodejs.org获得的二进制文件都兼容这些系统。用户在没有本地化支持GCC 6的系统上编译自己的二进制文件时,可能需要使用自定义的工具链。尽管Node.js 12.0.0或许可以使用较老的编译器进行编译,但预计Node.js 12代码库(包括V8)将在pre-LTS时间框架内迅速采用GCC 6支持的C++特性。u003Cu002Fpu003Eu003Cpu003EWindows平台的最低要求和Node.js 11一样,系统平台至少是Windows 7、2008 R2或2012 R2,编译器的最低要求是Visual Studio 2017。需要编译Node.js的macOS用户的编译器最低要求是Xcode 8,而nodejs.org上提供的Node.js二进制文件支持的最低平台是macOS 10.10“Yosemite”。u003Cu002Fpu003Eu003Cpu003E更多细节请查看Node.js中的 BUILDING.md(https:u002Fu002Fgithub.comu002Fnodejsu002Fnodeu002Fblobu002Fv12.xu002FBUILDING.md#platform-list )。u003Cu002Fpu003Eu003Cpu003Eu003Cstrongu003E致谢!u003Cu002Fstrongu003Eu003Cu002Fpu003Eu003Cpu003E非常感谢所有为此版本的发布做出贡献的人,无论你是提交了一个推送请求、帮助我们进行基准测试,还是负责其中一个版本。我们还要感谢Node.js构建工作组(https:u002Fu002Fgithub.comu002Fnodejsu002Fbuild )为我们提供的创建和测试版本的基础设施。Node.js 12的发布经理是Bethany Griggs。有关发布团队成员的完整列表,请访问这里(https:u002Fu002Fgithub.comu002Fnodejsu002Frelease#releasers-team )。您可以在这里(https:u002Fu002Fgithub.comu002Fnodejsu002Fnodeu002Fblobu002Fmasteru002Fdocu002Fchangelogsu002FCHANGELOG_V12.md )阅读有关完整功能列表的更多信息。u003Cu002Fpu003Eu003Cpu003E如果您有兴趣为Node.js做贡献, 我们欢迎你。请通过我们的贡献者指南(https:u002Fu002Fgithub.comu002Fnodejsu002Fnodeu002Fblobu002Fmasteru002FCONTRIBUTING.md )了解更多信息。u003Cu002Fpu003Eu003Cblockquoteu003Eu003Cpu003E 英文原文:https:u002Fu002Fqiniumedia.freelycode.comu002Fvcdnu002F1u002F优质文章长图3u002Fnode12.pdf u003Cu002Fpu003Eu003Cpu003E 译者:测试 u003Cu002Fpu003Eu003Cu002Fblockquoteu003Eu003Cu002Fdivu003E”

原文始发于:Node.js 12简介

主题测试文章,只做测试使用。发布者:熱鬧獨處,转转请注明出处:http://www.cxybcw.com/10824.html

联系我们

13687733322

在线咨询:点击这里给我发消息

邮件:1877088071@qq.com

工作时间:周一至周五,9:30-18:30,节假日休息

QR code