原文鏈接:https://www.yuque.com/egg/nodejs/nodejs-12
前言
時隔一年丁溅,Node.js 12 如約而至,正式發(fā)布第一個 Current 版本蛉谜。
該版本帶來了諸如:
- V8 更新帶來好多不錯的特性。
- HTTP 解析速度提升。
- 啟動速度大幅提升。
- 更好的診斷報告和堆分析工具睁枕。
- ESM 模塊更新官边。
原文地址:https://medium.com/@nodejs/introducing-node-js-12-76c41a1b3f3f
相關文章:Node.js 10 值得關注的新特性
LTS vs Current
如果你不了解 Node.js 的 Long Term Support 發(fā)布策略的話沸手,一定要看看 https://github.com/nodejs/Release 外遇。
就目前而言,Node.js 6.x 和 8.x 將在 2019 年末結束 LTS 的支持契吉,大家盡快升級到 10.x 吧跳仿。
V8 更新到 7.4
大部分情況下,我們不用去考慮性能問題捐晶,坐等 V8 版本更新就好了菲语。(大霧)
本次版本更新,也帶來了好幾個不錯的特性:
同時惑灵,跑了下我們 Egg 的一些內部測試山上,發(fā)現(xiàn)****序列化有 10~20% 的性能提升,恐怖如斯英支!
另佩憾,奇丑無比的 Private Class Fields 也能用了:
HTTP 解析速度提升
默認的 HTTP 解析器切換為 llhttp ,性能提升恐怖如斯:
點評:恐怖如斯干花。
啟動速度提升
通過 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 升級,現(xiàn)在可以按照可用內存動態(tài)調整堆大小了撒强。
ESM 模塊方案更新
點評:讓子彈再飛一會禽捆,該特性真的不是痛點,不急飘哨。
其他更新
- 更好的原生模塊支持胚想,N-API 升級為版本 4,并 backport 到 Node.js 8.x 和 10.x芽隆。詳細參見這篇文章顿仇。
- TLS 升級為 1.3, 增強安全功能摆马。
- 隨著 C++ 編譯器的更新臼闻,現(xiàn)在要求
GCC 6
和glibc 2.17
,對應的操作系統(tǒng) 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)