Node12有哪些值得關注的新特性?

前言

時隔一年,Node.js 12 如約而至,正式發佈第一個 Current 版本。它將從2019年10月開始進入長期支持(LTS)版本直到2022年4月。前端

該版本帶來的新特性:瀏覽器

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

LTS

Node維護了着兩條發佈流程線:奇數版本每一年的10月份發佈,偶數版本第二年的4月份發佈。當一個奇數版本發佈後,最近的一個偶數版本會當即進入LTS維護計劃,一直持續18個月(LTS Start )。再以後會有12個月的延長維護期(Maintenance Start)。緩存

這兩個期間能夠支持的變動是不同的:安全

  • LTS期間支持的變動:bug fix,安全問題 fix, 文檔更新和與將來新特性兼容問題的更新。
  • Maintenanece期間支持的變動: 嚴重的bug fix,嚴重的安全問題 fix 或者文檔更新。當一個偶數版本發佈時,奇數版本只有2個月的維護期,再只能乖乖升級。

就目前而言,Node.js 6.x 和 8.x 將在 2019 年底結束 LTS 的支持,你們儘快升級到 10.x 吧。異步

ESM

自從ES6中的標準化以來,import/ exportsyntax已成爲JavaScript開發人員的首選模塊語法,而Node團隊一直在努力實現本機化。實驗性支持從第8階段的Node 8.0開始,並在最新的Node版本上邁出了重要的一步。全部主流瀏覽器都支持 ECMAScript模塊<script type="module">,所以這是Node的一個巨大更新。async

// default exports
import module from 'module'
// named exports
import { namedExport } from 'module'
// namespace exports
import * as module from 'module'

V8引擎更新到7.4

本次版本更新,也帶幾個不錯的特性:函數

  • 異步堆棧跟蹤
  • 參數調用不匹配時的調用速度優化
  • 更快的 JavaScript 解析速度
  • 更快的 await

ECMAScript 新特性支持

隨着 V8 的更新,不少 ES 的新規範也落地了,好比支持類的私有變量。工具

class Greet {
  #name = 'World';
  get name() {
    return this.#name;
  }
  set name(name) {
    this.#name = name;
  }
  sayHello() {
    console.log(`Hello, ${this.#name}`);
  }
}

在類的外部或去#name變量會拋出異常性能

const greet = new Greet()
greet.#name = 'NewName';
// -> SyntaxError
console.log(greet.#name)
// -> SyntaxError

改善了啓動性能

Node 將在構建時間以前爲內置庫構建代碼緩存並將其嵌入爲二進制文件。主線程可以使用此代碼緩存,將啓動時間縮短30%。優化

HTTP 解析速度提高

默認的 HTTP 解析器切換爲 llhttp ,性能提高顯著
llhttp

TLS和安全

Node 12 如今支持TLS 1.3,它提供更高的安全性和更短的延遲。TLS 1.3已經成爲協議的一個重大更新,而且正在積極地在Web上集成。經過實施TLS 1.3,Node應用程序將增長最終用戶隱私,同時經過減小HTTPS握手所需的時間來提升請求性能。此外,默認狀況下已禁用TLS 1.0和1.1,而且crypto庫已刪除已棄用的函數。

堆大小分配策略

之前使用默認的V8堆大小,至關於700MB(32位系統)或1400MB(64位系統)。Node如今將根據可用內存肯定堆大小,這將確保它不會使用超過容許的資源。

堆轉儲功能

Node 12提供了生成堆轉儲的功能,從而能夠更輕鬆地調查內存問題。

其餘值得關注的更新

  • 工做線程再也不須要標誌
  • http已將其默認解析器更新爲llhttp
  • assert 驗證所需的參數並調整鬆散的斷言
  • buffer 改進使其更穩定和安全
  • async_hooks 刪除已棄用的功能

本文首發於公衆號「前端新視界」,分享前端資訊、技術乾貨、編碼人生,歡迎關注。

前端新視界

相關文章
相關標籤/搜索