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 的評價只有一個字:穩。
討論地址是: 精讀《Nodejs V12》 · Issue #184 · dt-fe/weekly
若是你想參與討論,請 點擊這裏,每週都有新的主題,週末或週一發佈。前端精讀 - 幫你篩選靠譜的內容。
關注 前端精讀微信公衆號
<img width=200 src="https://img.alicdn.com/tfs/TB...;>
版權聲明:自由轉載-非商用-非衍生-保持署名( 創意共享 3.0 許可證)