Node.js 8有哪些重要功能和修復?

77rou發表於2017-06-02

5月30日12點,Node.js 8正式釋出了,這個版本具有一系列新功能和效能改進,並且這些功能和改進將獲得長期支援(LTS)。

下面就來介紹Node.js 8版本中最重要的功能和修復。

新版本的代號是Carbon。Node.js 8將從2017年10月起,正式成為當前的LTS版本,並持續到2019年12月31日。這也意味著Node.js 6版本將在2018年4月進入到維護模式,並在2019年4月結束維護支援。

下載Node.js 8版本:https://nodejs.org/download/rc/v8.0.0-rc.2/


Async Hooks API介紹

Async Hooks (以前稱為AsyncWrap) API允許獲取有關控制程式碼物件生命週期的結構跟蹤資訊。

API發出的訊息會將Node.js中所有控制程式碼物件的生命週期告知給consumer。它試圖解決類似於continuation-local-storage npm package這樣的問題。

如果你正在使用continuation-local-storage,那麼已經可以用稱為cls-hook的async hooks來代替使用了 – 只是目前並不是使用async hooks的最好時機,所以需要謹慎使用!


Async Hooks API 在 Node.js 8 中如何工作

createHooks函式的註冊功能會被每一個非同步操作的不同生命週期事件呼叫。

const asyncHooks = require('async_hooks')
asyncHooks.createHooks({  
  init,
  pre,
  post,
  destroy
})

瞭解更多Async Hooks,或檢視正在進行的工作文件。這些函式將會根據處理程式物件的生命週期事件選擇性觸發。


N-API介紹

N-API是用於構建原生外掛的API。它獨立於底層JavaScript執行時,並作為Node.js自身的一部分進行維護。這麼做的目的是保證應用程式二進位制介面(ABI)在不同Node.js版本之間能夠保持穩定。

N-API的目的是將附加元件和基礎JavaScript引擎中的更改區分開,以便原生外掛在不需要重新編譯情況下,就可以執行不同的Node.js版本。

瞭解更多N-API資訊。


Node.js 8中的緩衝區安全性改進

在Node.js 8版本之前,使用new Buffer(Number)建構函式分配的緩衝區並未使用ZEROS初始化記憶體空間。結果導致新的Buffer例項可能包含敏感資訊,容易導致安全問題。

雖然這是一個用於提高建立新Buffer效能的決定,但是對大多數人來說,並不打算這麼使用。因此從Node.js 8開始,使用new Buffer(Number)或Buffer(Number)分配的Buffers會被ZEROS自動填充。


將V8升級到5.8:TurboFan&Ingnition

使用Node.js 8版本,底層的V8 JavaScript引擎也會更新。

對於Node.js使用者來說,最大的變化就是引入TurboFan和Ignition。Ignition是V8的直譯器,TurboFan是優化編譯器。

“Ignition和TurboFan的聯合使用已經開發了近3?年,它代表了V8團隊集體認識的最終結果,是V8團隊收集了JavaScript的實測效能並仔細分析了Full-codegen的缺點和Crankshaft的結果。這也是能夠在未來幾年內繼續優化JavaScript語言體系的基礎。“ - Daniel Clifford和V8團隊

目前V8的編譯管道如下圖所示。

這個管道的最大問題是,新的語言功能必須在管道的不同部分實現,這就增加了大量額外的開發工作。

下面是簡化的管道,沒有了FullCode Generator和Crankshaft:

 

新管道大大降低了V8團隊的技術負擔,並實現了很多之前無法實現的改進。

瞭解更多TurboFan and Ignition 和 TurboFan Inlining Heuristics 


將npm升級到5.0.0

新的Node.js 8版本還附帶npm 5 - 最新版本的npm CLI。

新npm版本的亮點:

  • 一種新的標準化的鎖定檔案功能,用於跨包管理器的相容性(package-lock.json),以及一種用於shrinkwrap的新格式和語義
  • --save 已經不再需要了,因為所有的安裝將預設儲存
  • node-gyp現在支援Windows的node-gyp.cmd
  • 新的釋出版本將會包括sha512和sha1校驗


Node.js 8版本中的其它顯著改變

Buffer

Buffer方法現在接受Uint8Array作為輸入

Child Process

  • Argument和Kill訊號驗證得到改善
  • Child Process方法接受Uint8Array作為輸入

Console

使用控制檯方法時,錯誤事件傳送現在受到了抑制

Domains

Native Promise例項現在是域感知的

檔案系統

  • 實用程式類fs.SyncWriteStream已被棄用
  • 已棄用的fs.read( )字串介面已被刪除

HTTP

  • 溢位的Cookie headers會被連線成一個字串
  • 該httpResponse.writeHeader( )方法已被棄用

Stream

Stream現在支援destroy( )和_destroy( ) API

TLS

該rejectUnauthorized選項現在預設為true

URL

WHATWG URL的實現,現在是Node.js API完全支援的


Node.js 8下一步要做什麼

Node.js 8版本令我們興奮,因為它包含了很多有趣的提升,例如Async Hooks API,這些API在當前的文件狀態是很難掌握的。我們將盡快開始使用新版本,並儘快提供給使用者新功能的更詳細說明。

在眾多支援node.js的產品中,值得一提的是Wijmo,這是一款為企業應用程式開發而推出的一系列包含 HTML5 和 JavaScript 的開發控制元件集。無論你的應用程式是移動端、PC端、還是必須要支援IE6,Wijmo Enterprise 均能滿足需求。

原文連結:https://blog.risingstack.com/important-features-fixes-node-js-version-8/

轉載請註明出自:葡萄城控制元件

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/28298702/viewspace-2140201/,如需轉載,請註明出處,否則將追究法律責任。

相關文章