Node12 发布有几个月了,让咱们跟随 Nodejs 12 一块儿看看 Node12 带来了哪些改变。javascript
Node12 与以往的版本不一样,带来了许多重大升级,包括更多 V8 特性,Http 解析速度的提高,启动速度的提高,更好的诊断报告、内置堆分析工具,ESM 模块的更新等。html
V8 升级带来了以下几个特性:前端
可见 V8 引擎的升级不只给 Node12 带来了福音,也给会必定程度上提高网页的运行效率。java
随着 Node12 的发布,TLS 从 1.2 升级到了 1.3,更安全且更易配置。经过使用 TLS 1.3,Node 程序能够减小 Https 握手所需时间来提高请求性能。node
之前默认堆大小须要经过 -max-old-space-size
设置,并且默认值是一个固定值,如今这个默认值能够根据可用内存动态分配,这样当内存较小时,Node 不会让内存移除而报错,而是主动终止本身的进程。git
nodejs 的 http-parser 已经很是难以维护和优化了,所以 llhttp 这个库,比 http-parser 快 156%,更重要的是,在 Node12 中,将默认解析器切换到了 llhttp。github
Node12 有一项实验功能,根据用户需求提供诊断报告,包括崩溃、性能降低、内存泄露、CPU 使用高等等。express
在之前,若是要将堆内存生成 dump 文件,须要在生产环境安装额外的模块,而 Node12 集成了这个功能。npm
C++ 拓展 N-API 升级到版本 4,同时一个原生模块能够被 C++ 编写并发布到 npm,就像一个普通 JS 模块同样被引用。不过要注意一些区别:json
JS 模块 | 原生拓展 | ||
---|---|---|---|
1. | ... 须要编译 | 否 | 若是预编译了则不用 |
2. | ... 是否能够运行在全部平台 | 是 | 若是预编译了则能够 |
3. | ... 是否兼容全部 Node 版本 | 是 | 否 |
4. | ... 会被加载屡次 | 是 | 否 |
5. | ... 若是没有明确使用多线程,则线程安全 | 是 | 否 |
6. | ... 能够被销毁 | 是 | 否 |
--experimental-worker
实验开关已取消,默认支持 worker_threads
。
要注意的是,执行 CPU 密集型任务时适合用 worker(大量计算),而执行 I/O 密集型任务时,Worker 反而没有 Node 内置的 I/O 操做性能好(读写文件)。
经过在构建时提早为内置库生成代码缓存,最终使启动时间加快 30%。
Node12 对 ES6 module 的支持依然处于实验阶段,须要经过 --experimental-modules
开启。
简单来讲,就是支持了 Import Export 语法,不须要再转成 require
了!若是在 package.json
增长 "type": "module"
的配置,Node 将按照 ES6 module 方式处理。
因为升级到新的 V8 引擎以及内部改造,所以 Node12 在 Mac 与 Windows 以外的平台上,须要至少 GCC6 和 glibc 2.17。
对于 V8 引擎升级、TLS 升级、堆配置自动化、http-parser 升级到 llhttp、启动速度优化都属于被动优化,代码无需改动,只要升级 Node 版本就能够享受。
支持 ES6 module 这个特性其实比较鸡肋,毕竟源码用 Ts 写的话,这些升级并不会对源码产生影响。
worker_threads
能够被默认启用,就像之前支持 async/await
同样,会带来 Nodejs 多线程更普遍的使用。
Node12 更新了 V8 引擎,随着 V8 的更新,不少 ES 新规范也落地了,好比 Class 成员函数、私有成员变量等等。
Nodejs 仅有 10 年历史,但如今愈来愈被开发者欢迎,由于它可让 JS 运行在服务端,是扩大 JS 生态的重要一环。从 Node 更新历史中能够看到,性能和语法能力稳步提高,一些服务端环境须要的诊断报告、堆栈分析能力都在逐渐完善,社区上也有 Alinode 与 egg、express、koa 等好用的服务框架,相对于前端翻天覆地的变化,对 Node 的评价只有一个字:稳。
若是你想参与讨论,请 点击这里,每周都有新的主题,周末或周一发布。前端精读 - 帮你筛选靠谱的内容。
关注 前端精读微信公众号
版权声明:自由转载-非商用-非衍生-保持署名(创意共享 3.0 许可证)