Node.js 12 發佈!來看看有哪些新動向吧

Node.js 12 介紹

原文:https://segmentfault.com/a/1190000018977640

翻譯自 Medium 翻譯不完整,如有需要請參考原文。

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

今天我們非常激動地發佈了 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 ----------------

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章