Node.js 12 发布!来看看有哪些新动向吧

赖大的母
• 阅读 3900

Node.js 12 介绍

翻译自 Medium 翻译不完整,如有需要请参考原文。

本文由 Bethany Griggs 以及 Michael Dawson 撰写,并由 Node.js Release Team 和 Technical Steering committee 提供帮助。

Node.js 12 发布!来看看有哪些新动向吧

今天我们非常激动地发布了 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 ----------------

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
美凌格栋栋酱 美凌格栋栋酱
6个月前
Oracle 分组与拼接字符串同时使用
SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(
Stella981 Stella981
3年前
List的Select 和Select().tolist()
List<PersondelpnewList<Person{newPerson{Id1,Name"小明1",Age11,Sign0},newPerson{Id2,Name"小明2",Age12,
Wesley13 Wesley13
3年前
Activiti 工作流入门指南
<divclass"htmledit\_views"id"content\_views"<h1<aname"t0"</a概览</h1<p如我们的介绍部分所述,Activiti目前分为两大类:</p<ul<li<p<ahref"https://activiti.gitbook.io/activiti7deve
Stella981 Stella981
3年前
AssemblyScript 入门指南[每日前端夜话0xEB]
每日前端夜话0xEB每日前端夜话,陪你聊前端。每天晚上18:00准时推送。正文共:2459 字预计阅读时间:10分钟作者:DannyGuo翻译:疯狂的技术宅来源:logrocket!(https://oscimg.oschina.net/oscnet/b880277c594152a503
Wesley13 Wesley13
3年前
FLV文件格式
1.        FLV文件对齐方式FLV文件以大端对齐方式存放多字节整型。如存放数字无符号16位的数字300(0x012C),那么在FLV文件中存放的顺序是:|0x01|0x2C|。如果是无符号32位数字300(0x0000012C),那么在FLV文件中的存放顺序是:|0x00|0x00|0x00|0x01|0x2C。2.  
Wesley13 Wesley13
3年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Wesley13 Wesley13
3年前
PHP创建多级树型结构
<!lang:php<?php$areaarray(array('id'1,'pid'0,'name''中国'),array('id'5,'pid'0,'name''美国'),array('id'2,'pid'1,'name''吉林'),array('id'4,'pid'2,'n
Stella981 Stella981
3年前
Docker发布开发团队2021年三个首选方向;工信部印发《工业互联网创新发展行动计划(2021
\_开发者社区技术周刊\_又和大家见面了,快来看看这周有哪些值得我们开发者关注的重要新闻吧。!(https://static001.geekbang.org/infoq/0e/0ef0749d6a02848951b542a9d8828656.webp)智源研究院发布超大规模新型预训练模型“文汇”参数量级达113亿
Easter79 Easter79
3年前
TypeScrip最污的技术课
!alt(https://usergoldcdn.xitu.io/2018/9/21/165f98863487350a?imageView2/0/w/1280/h/960/format/webp/ignoreerror/1)近日Node.js之父瑞安达尔(RyanDahl)发布新的开源项目deno,从官方介绍来看,可以认为它是下一代Nod
赖大的母
赖大的母
Lv1
刷羽同摇漾,一举还故乡。
文章
3
粉丝
0
获赞
0