Node.js 9.0.0 發佈

【首發於個人我的博客:tonghuashuo.github.io/blog/nodejs…html

Node.js 發佈計劃

Node.js 從 5.0 開始一直遵循着半年一個大版本的發佈週期,每一年 4 月左右發佈一個主版本號爲偶數的 LTS(Long-Term-Support)版本,每一年 10 月左右發佈一個主版本號爲奇數的非 LTS 版本。前端

新版本發佈後的半年內被稱爲「當前版本」,起初可能會遇到較多的向下兼容問題,早期升級的開發者可能會受到短時間的「生長痛」影響,通過若干小版本的更新後會逐漸趨於穩定。node

每一年 10 月的奇數版本發佈後,同年 4 月發佈的偶數版本進入 LTS 階段,爲期一年半。期間除非 Release 工做組贊成,再也不添加新特性,只對現有功能進行完善,變動內容僅限於:git

  1. 修復 Bug
  2. 安全性升級
  3. npm 升級(主版本號不變)
  4. 相關文檔的更新
  5. 性能優化(基本不會影響已有的應用程序)
  6. 會引入大量繁瑣噁心的代碼(對已有應用程序的影響很低),可是對將來作向下兼容補丁有利的變動

最後還有 1 年時間的維護期,期間除非是很是嚴重的 Bug 或安全性問題,再也不有改動,對文檔的修改也須要受權才能夠。LTS 版本的生命週期共計 3 年,以後再也不維護。github

奇數版本一般會相對激進地引入一些新的語法和特性,變化也會比較快,主要用於對一些新特性的試錯和測試,穩定性並不是追求的第一目標(畢竟只活半年)。因爲變化較快,風險很是不可控,不推薦在生產環境使用奇數版本的 Node.js,想嚐鮮的開發者們,請務必作好足夠的思想準備,迎接不穩定的功能變動,並肯定本身有足夠能力應對升級引起的各類問題(已有代碼、開發環境和工具受升級影響沒法正常使用等)。建議先在我的設備上有了必定實踐,踩掉一些坑,感受本身能 hold 住了,再考慮遷移到公司設備上。npm

偶數版本主要考慮用於生產環境,穩定性的優先級會比較高,但並不排除引入斷層升級的可能性(例如 Node.js 8.0 升級更新了 npm 到 5.0,新版 npm 對用老版本安裝的依賴沒有作好相應的處理,致使大量從 4.x 升級過來的用戶直接無法幹活了,只能經過全新安裝依賴來解決。官方 Github 上有人維護了一長串的 Known Issue,其中影響較大的幾個問題至今沒能獲得解決,可能官方也不打算管了)。升級建議:安全

  • 新版本剛發佈先別急更新到生產環境,找測試設備踩一遍坑先
  • 多關注官方 Github 上的 Issue
  • 持續關注最新動態,由於最多 3 年時間,老版本就退休了,升級是遲早的

Node.js 9.0.0 的主要變化

本次升級並無太多使人興奮的點,官方並不但願大版本的更新致使嚴重的斷層,所以新特性、語法會在次版本更新中逐漸被加入。主要變化以下:性能優化

  • 一個主要的依賴迎來了更新,V8 引擎更新到了 6.2,異步 IO 庫 libuv 更新到 1.15.0,DNS 庫 c-ares 更新到 1.13.0
  • N-API 和 HTTP2 能夠直接用了,不須要再加 flag。新版本引入了 Async Hook,儘管依然屬於實驗性功能,但這次升級後就已經可使用了
  • Node.js 核心庫開始逐漸遷移到一個全新的報錯系統,爲每一種錯誤類型提供惟一的錯誤代碼,以此在不破壞已有代碼的前提下,提升用戶代碼的健壯性
  • 當接收到的請求沒法被正確解析時,HTTP 模塊會返回一個 400 錯誤。此前 Node.js 會直接將 socket 掛起,致使服務器誤覺得 node 進程掛了
  • assert 模塊能夠拋出任意類型的錯誤,而再也不僅限於斷言錯誤
  • Node.js 使用 32 位帶符號整數來表示計時器延遲,當延遲溢出時,新版本會增長 1 毫秒延遲,以往版本對此沒有處理
  • API 文檔和測試套件的更新,JS 和 C++ 的測試覆蓋率均達到 90% 以上

Node.js 9.0.0 發佈以後

按照官方的發佈計劃,9.0 的發佈,意味着 8.x 進入 LTS 階段,7.x 完全退出舞臺,6.x 的 LTS 還有半年結束。也就是說,差很少是時候考慮往生產環境部署 Node.js 8.x 了。服務器

番外

或許是由於大部分人都是實用主義者,你們內心都很清楚,奇數版本就是用來試錯的,只有偶數版本纔會被用於生產環境,所以大部分人都會關注「有用」的偶數版本,而忽略「與我無關」的奇數版本。從搜索引擎對「node 7」和「node 8」的收錄狀況來看,關於 node 7 的討論很是少,除了一些主流媒體報道了一些版本發佈的消息,基本搜不到什麼有價值的內容,而關於 node 8 的討論就明顯要多一些。異步

倒不是想說這有什麼不對,每一個人的精力都有限,實用主義沒什麼很差。做爲一名大前端技術的愛好者,同時也是一名職業的開發者,我我的是比較樂於去了解和嘗試新技術的,即使它最後並沒可以成爲主流,但只有親自嘗試了,纔有發言權說這東西究竟如何。也只有親自參與其中,才能真正領略到開源世界衆多開發者們的智慧,思考的過程纔是真正學到東西的過程。

但願本文可以爲「或許註定要被忽略」的 Node.js 9.x 多少貢獻一點點的關注度吧。

相關文章
相關標籤/搜索