CNode

Node 12 值得关注的新特性

分享
Aatian25发布于7 年前最后回复6 年前92 回复318383 浏览0 收藏

前言

时隔一年,Node.js 12 如约而至,正式发布第一个 Current 版本。

该版本带来了诸如:

  • V8 更新带来好多不错的特性。
  • HTTP 解析速度提升。
  • 启动速度大幅提升。
  • 更好的诊断报告和堆分析工具。
  • ESM 模块更新。

原文地址:https://medium.com/@nodejs/introducing-node-js-12-76c41a1b3f3f 语雀地址:https://www.yuque.com/egg/nodejs/nodejs-12

LTS vs Current

image.png

如果你不了解 Node.js 的  Long Term Support 发布策略的话,一定要看看 https://github.com/nodejs/Release 。

就目前而言,Node.js 6.x 和 8.x 将在 2019 年末结束 LTS 的支持,大家尽快升级到 10.x 吧。

快速体验

$ nvs add node/12
$ nvs use 12
$ node -v
v12.0.0

具体参考这篇文章:科普文:使用 nvs 管理本地 Node.js 版本

V8 更新到 7.4

大部分情况下,我们不用去考虑性能问题,坐等 V8 版本更新就好了。(大雾)

本次版本更新,也带来了好几个不错的特性:

同时,跑了下我们 Egg 的一些内部测试,发现序列化有 10~20% 的性能提升,恐怖如斯!

另,奇丑无比的 Private Class Fields 也能用了:

class IncreasingCounter {
  #count = 0;
  
  get value() {
    console.log('Getting the current value!');
    return this.#count;
  }
  increment() {
    this.#count++;
  }
}

HTTP 解析速度提升

默认的 HTTP 解析器切换为 llhttp ,性能提升恐怖如斯:

image.png

点评:恐怖如斯。

启动速度提升

通过 v8 code cache 的支持,在构建时提前为内置库生成代码缓存,从而提升 30% 的启动耗时。 同时,通过重用主进程缓存,Workers Threads 的启动速度提升了 60% 。

点评:恐怖如斯。

Workers Threads

在 10.x 已经引入的 Workers Threads 特性,在 12.x 里面默认启用,无需使用 --experimental-worker 开启。同时基于上一条的介绍,启动的速度也得到大幅提升。

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

诊断报告

提供了新的实验性功能『诊断报告』,一个非常有用的特性。 可用于帮助分析诸如:崩溃,性能问题,内存泄漏,高 CPU 占用等等问题。详见 这篇文章

点评:这也是 AliNode 之前的一个卖点之一。

Heap Dump

以前我们分析问题的时候,需要手动安装对应的类库或者使用 AliNode。

在 12.x 里面内置了该功能,详见:

点评:又一个 AliNode 的功能被内置了。但其实影响不大,AliNode 的核心在于分析平台,这块的采集能力,本来他们就打算开源回馈出去的。

同时,由于上述提到的 V8 升级,现在可以按照可用内存动态调整堆大小了。

ESM 模块方案更新

ES6 模块仍然还在实验阶段,不过有了新的方式,具体参见这篇文章

点评:让子弹再飞一会,该特性真的不是痛点,不急。

其他更新

  • 更好的原生模块支持,N-API 升级为版本 4,并 backport 到 Node.js 8.x 和 10.x。详细参见这篇文章
  • TLS 升级为 1.3, 增强安全功能
  • 随着 C++ 编译器的更新,现在要求 GCC 6 和 glibc 2.17 ,对应的操作系统 Win7 和 macOS 10,详细参见这篇文章

不过目前 node-gyp 的一些原生模块会编译失败:

nunjucks@3.2.0 › chokidar@2.1.5 › fsevents@^1.2.7 optional error: Error: Run "sh -c node install" error, exit code 1
    at ChildProcess.<anonymous> (/Users/tz/.npm-global/lib/node_modules/tnpm/node_modules/_runscript@1.3.0@runscript/index.js:74:21)
    at ChildProcess.emit (events.js:196:13)
    at maybeClose (internal/child_process.js:1000:16)
    at Process.ChildProcess._handle.onexit (internal/child_process.js:267:5)
查看回复

回复 (90)

Z
zy445566#1·7 年前

node-gyp一直都是尴尬的存在,N-API 也是换汤不换药。不过总体还在进步,这就够了。

A
AnzerWall#2·7 年前

白嫖的性能提升,真好。 私有域有了,啥时候有装饰器啊

Z
zy445566#3·7 年前
引用 AnzerWall白嫖的性能提升,真好。 私有域有了,啥时候有装饰器啊

@AnzerWall 是啊,原生的装饰器确实比私有域需求更迫切啊

V
v5sollee#4·7 年前

恐怖如斯

H
hyj1991#9·7 年前

node-v100.0.0,想想就 emmm

W
wujohns#10·7 年前
引用 zuohuadong@AnzerWall typescript 一时爽, 一直 typescript 一直爽。

@zuohuadong 目前配合ts还是有bug,不过官方在修了(本来打算业余新工程直接上node12的。。。

L
liuyifengmvc#11·7 年前

以关注

X
xuemeifenglin#12·7 年前

node 更新速度有些快哦 难道是用的人多了吗

A
atian25#13·7 年前
引用 xuemeifenglinnode 更新速度有些快哦 难道是用的人多了吗

@xuemeifenglin 正常速度,看下 https://github.com/nodejs/Release 就知道了,正常的迭代速度而已,类似 Chromium

J
junjufeng#15·7 年前

站在巨人的肩膀上 加油

D
dengnan123#16·7 年前

期待

S
spitWind#19·7 年前

编译c++ 模块就傻眼了 .

W
waitingsong#20·7 年前
引用 spitWind编译c++ 模块就傻眼了 .

@spitWind node-gyp v4.0 已经支持 nodejs v12

S
spitWind#21·7 年前
引用 waitingsong@spitWind node gyp v4.0 已经支持 nodejs v12

@waitingsong 模块编译不出来, 底层的库不支持 ~

C
cch-HS#22·7 年前

11

J
Jimyfar#23·7 年前

11

X
xdayannanfei#26·7 年前

用node 的express 框架写的服务端,现扫描出Slow HTTP Denial of Service Attack漏洞,要怎么弄??

Z
zuohuadong#27·7 年前
引用 wushanchao@AnzerWall 等装饰器有了,离spring boot.js 不远了。

@wushanchao 现在 nest.js 就有这些 js 原生支持 估计得有些日子了~

N
NanrayJack#28·7 年前

sss

R
remenwang#29·7 年前

这么快又发布新版本了!!!!

H
hywyx#30·7 年前

@hxwyx 测试message

H
hywyx#31·7 年前
引用 hywyx@hxwyx 测试message

@hywyx 测试message

Z
z3116364593#34·7 年前

女大三 送金砖 女大三十 送江山 女大三百 送仙丹 女大三千 位列仙班

W
waitingsong#35·7 年前

12 就快 LTS 了。

A
atian25#36·7 年前
引用 waitingsongLTS 12.13.0 released https://github.com/nodejs/node/blob/master/doc/changelogs/CHANGELOG V12.md ...

@waitingsong 应该把 12.0 ~ 12.13 的 ChangeLog 整合下看看有什么增加的大一点的变化

大概肉眼过了下 Notable changes,没有太多需要注意的。

W
wei2573533873#38·7 年前
引用 hxy-gg@zy445566 fghhhh

@hxy-gg 1111111111

M
maisonfr#39·7 年前

太好了

W
waitingsong#40·7 年前
引用 atian25@waitingsong 应该把 12.0 12.13 的 ChangeLog 整合下看看有什么增加的大一点的变化 大概肉眼过了下 Notable changes,没有太多需要注意的。

@atian25 v10-v12 没多少 breaking change。nodejs 架构已经成熟,js 既往的坑也填得差不多。major版本主要是增加 ECMA 的新功能。 对于常用场景的服务我觉得只要ci能过就不会有啥问题。

W
waitingsong#42·7 年前
引用 atian25@waitingsong 我之前的意思是,看看有什么是 12 lts 比 12 stable 多的功能在这篇文章没有

@atian25
v12 LTS 和 v12 stable 区别是啥呢,有点糊涂…… v12 stable 你指的是 v12.13 之前的版本吧?

A
atian25#43·7 年前
引用 waitingsong@atian25 v12 LTS 和 v12 stable 区别是啥呢,有点糊涂…… v12 stable 你指的是 v12.13 之前的版本吧?

@waitingsong 嗯,因为这篇文章是 12 的第一个 stable 版本时写的,但 12 进入 lts 中间有过好几个版本,上面的意思是要看这期间有什么值得补充的变更。(已看完没啥特别的

A
ahuigo#44·7 年前

装饰器呀!!!还不上。。

我还是期待下deno/ts 吧!

M
mrdulin#45·7 年前

图挂了?

W
w3cfed#46·6 年前

天猪前辈,我是与子同袍——支援海外同胞的志愿者,老王。很开心能跟您建立连接,如果有需要可否方便进一步沟通 https://eleduck.com/posts/eR3fvn

J
justjavac#47·6 年前

v14 上线了

J
jxycbjhc#48·7 年前
引用 v5sollee恐怖如斯

@v5sollee 我还以为看到了辰东的小说,恐怖如斯

Z
zuohuadong#49·7 年前
I
i5ting#50·7 年前

llhttp代码更新的还是挺有意思的,给猪哥点赞

Z
zengming00#51·7 年前

有生之年一定能看到node v100

A
atian25#52·7 年前
引用 zengming00有生之年一定能看到node v100

@zengming00 那你要努力活久点,少点 996 . 按当前 Node 的节奏 https://github.com/nodejs/Release ,一年是 2 个版本,到 100 的话,差不多是 2106 年。

Z
zbinlin#53·7 年前

奇丑无比的 Private Class Fields

+10086

Z
zengming00#54·7 年前
引用 atian25@zengming00 那你要努力活久点,少点 996 . 按当前 Node 的节奏 https://github.com/nodejs/Release ,一年是 2 个版本,到 100 的话...

@atian25 从未996,最惨的时候是17年在兔展大小周,我基本上都是准时上下班的。18年更是从未加过班,我的原则就是加班时间效率约等于0

R
ruyuejun#55·7 年前

非常不错,觉得Node12是继引入async await后又一个重要的更新

Z
zubincheung#57·7 年前

期待LTS

J
justjavac#58·7 年前

恐怖如斯

J
JacksonTian#59·7 年前
J
justjavac#60·7 年前
引用 JacksonTian@zengming00 只有虵才能看到吧

@JacksonTian node12 都出了,深入浅出2 什么时候出啊

A
atian25#61·7 年前
Z
zuohuadong#62·7 年前
引用 wujohns@zuohuadong 目前配合ts还是有bug,不过官方在修了(本来打算业余新工程直接上node12的。。。

@wujohns 后端一直在用 nest.js ,也推荐 midway 之类的框架,默认就是 ts ~

C
chapgaga#63·7 年前

ES6 模块仍然还在实验阶段,不过有了新的方式,具体参见这篇文章。 链接打不开 404We couldn’t find this page.

W
wushanchao#66·7 年前
引用 AnzerWall白嫖的性能提升,真好。 私有域有了,啥时候有装饰器啊

@AnzerWall 等装饰器有了,离spring boot.js 不远了。

L
luckymore#67·7 年前

恐怖如斯, 恐怖如斯

K
kwoktung#68·7 年前

111

Z
zweekend01#69·7 年前

1111

Z
ZeroSad#70·7 年前
引用 kwoktung111

@kwoktung 2222

Z
ZhelinCheng#71·7 年前
Y
youarenode#72·7 年前

node 真好。爱生活,爱拉芳。

B
Billgo#73·7 年前

恐怖如斯 必须更新

V
VarDking#75·7 年前

值得期待

B
binbinecust#76·7 年前

期待

B
binbinecust#77·7 年前

厉害

T
tianyaxingge#78·7 年前
引用 binbinecust厉害

@binbinecust

T
tianyaxingge#79·7 年前
引用 tianyaxingge@binbinecust

@tianyaxingge 好的

B
Blocks-g#81·7 年前

GGG可以试试

W
wxisfat#82·7 年前

666

A
alexzhao8326#85·7 年前
引用 zubincheung期待LTS

@zubincheung 同期待

W
waitingsong#87·6 年前

v14 就要上线了~

W
wycJason#89·6 年前
引用 youarenodenode 真好。爱生活,爱拉芳。

@youarenode node 速度就是快

V
Vvk-viveka#90·6 年前
引用 zengming00@atian25 从未996,最惨的时候是17年在兔展大小周,我基本上都是准时上下班的。18年更是从未加过班,我的原则就是加班时间效率约等于0

@zengming00 您好,我在node.js社区上留意到您正在找工作,我目前在招nodejs后端开发工程师,请问您感兴趣吗?

参与回复
登录后即可参与回复。登录