精讀《Nodejs V12》

1. 引言

Node12 發佈有幾個月了,讓咱們跟隨 Nodejs 12 一塊兒看看 Node12 帶來了哪些改變。javascript

2. 概述

Node12 與以往的版本不一樣,帶來了許多重大升級,包括更多 V8 特性,Http 解析速度的提高,啓動速度的提高,更好的診斷報告、內置堆分析工具,ESM 模塊的更新等。html

V8 引擎升級

V8 升級帶來了以下幾個特性:前端

可見 V8 引擎的升級不只給 Node12 帶來了福音,也給會必定程度上提高網頁的運行效率。java

TLS 1.3 更好的安全性

隨着 Node12 的發佈,TLS 從 1.2 升級到了 1.3,更安全且更易配置。經過使用 TLS 1.3,Node 程序能夠減小 Https 握手所需時間來提高請求性能。node

默認堆被正確配置了

之前默認堆大小須要經過 -max-old-space-size 設置,並且默認值是一個固定值,如今這個默認值能夠根據可用內存動態分配,這樣當內存較小時,Node 不會讓內存移除而報錯,而是主動終止本身的進程。git

默認的 http 解析器變爲 llhttp

nodejs 的 http-parser 已經很是難以維護和優化了,所以 llhttp 這個庫,比 http-parser 快 156%,更重要的是,在 Node12 中,將默認解析器切換到了 llhttp。github

提供診斷報告

Node12 有一項實驗功能,根據用戶需求提供診斷報告,包括崩潰、性能降低、內存泄露、CPU 使用高等等。express

堆內存 dump

在之前,若是要將堆內存生成 dump 文件,須要在生產環境安裝額外的模塊,而 Node12 集成了這個功能。npm

更好的原生模塊支持

C++ 拓展 N-API 升級到版本 4,同時一個原生模塊能夠被 C++ 編寫併發布到 npm,就像一個普通 JS 模塊同樣被引用。不過要注意一些區別:json

JS 模塊 原生拓展
1. ... 須要編譯 若是預編譯了則不用
2. ... 是否能夠運行在全部平臺 若是預編譯了則能夠
3. ... 是否兼容全部 Node 版本
4. ... 會被加載屢次
5. ... 若是沒有明確使用多線程,則線程安全
6. ... 能夠被銷燬

Worker 被正式啓用了

--experimental-worker 實驗開關已取消,默認支持 worker_threads

要注意的是,執行 CPU 密集型任務時適合用 worker(大量計算),而執行 I/O 密集型任務時,Worker 反而沒有 Node 內置的 I/O 操做性能好(讀寫文件)。

啓動速度優化

經過在構建時提早爲內置庫生成代碼緩存,最終使啓動時間加快 30%。

支持 ES6 module

Node12 對 ES6 module 的支持依然處於實驗階段,須要經過 --experimental-modules 開啓。

簡單來講,就是支持了 Import Export 語法,不須要再轉成 require 了!若是在 package.json 增長 "type": "module" 的配置,Node 將按照 ES6 module 方式處理。

新的編譯器和平臺要求

因爲升級到新的 V8 引擎以及內部改造,所以 Node12 在 Mac 與 Windows 以外的平臺上,須要至少 GCC6 和 glibc 2.17。

3. 精讀

對於 V8 引擎升級、TLS 升級、堆配置自動化、http-parser 升級到 llhttp、啓動速度優化都屬於被動優化,代碼無需改動,只要升級 Node 版本就能夠享受。

支持 ES6 module 這個特性其實比較雞肋,畢竟源碼用 Ts 寫的話,這些升級並不會對源碼產生影響。

worker_threads 能夠被默認啓用,就像之前支持 async/await 同樣,會帶來 Nodejs 多線程更普遍的使用。

Node12 更新了 V8 引擎,隨着 V8 的更新,不少 ES 新規範也落地了,好比 Class 成員函數、私有成員變量等等。

4. 總結

Nodejs 僅有 10 年曆史,但如今愈來愈被開發者歡迎,由於它可讓 JS 運行在服務端,是擴大 JS 生態的重要一環。從 Node 更新歷史中能夠看到,性能和語法能力穩步提高,一些服務端環境須要的診斷報告、堆棧分析能力都在逐漸完善,社區上也有 Alinode 與 egg、express、koa 等好用的服務框架,相對於前端翻天覆地的變化,對 Node 的評價只有一個字:穩。

討論地址是:精讀《Nodejs V12》 · Issue #184 · dt-fe/weekly

若是你想參與討論,請 點擊這裏,每週都有新的主題,週末或週一發佈。前端精讀 - 幫你篩選靠譜的內容。

關注 前端精讀微信公衆號

版權聲明:自由轉載-非商用-非衍生-保持署名(創意共享 3.0 許可證

相關文章
相關標籤/搜索