Node 12 值得關注的新特性


前言

時隔一年,Node.js 12 如約而至,正式發布第一個 Current 版本。

該版本帶來了諸如:

  • V8 更新帶來好多不錯的特性。
  • HTTP 解析速度提升。
  • 啟動速度大幅提升。
  • 更好的診斷報告和堆分析工具。
  • ESM 模塊更新。 

原文地址:https://medium.com/@nodejs/introducing-node-js-12-76c41a1b3f3f

相關文章:Node.js 10 值得關注的新特性

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

本次版本更新,也帶來了好幾個不錯的特性:

同時,跑了下我們 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 占用等等問題。詳見 這篇文章

Heap Dump

以前我們分析問題的時候,需要手動安裝對應的類庫或者使用 AliNode。

在 12.x 里面內置了該功能,詳見:

同時,由於上述提到的 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)

本文摘抄至:Egg.js 團隊  https://www.yuque.com/egg/nodejs/nodejs-12

若有侵權及時聯系。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM