為您的 Node 性能選擇最佳的 JS 引擎
本文翻譯自 Picking the best JS engine for your Node app』s performance,中文版首發在我的知乎專欄 V8 源碼及周邊。
tl;dr
Node.js 正在飛速的發展。目前 Node.js 8 已經發布。同時,基於 ChakraCore 的 Node.js 版本也正在積極開發中。
原文是:The recent Node.js v8 version (not to be mistaken with V8, the JavaScript engine) has just been published.
原作者使用了 Node.js v8 version 這個詞,為此作者專門在括弧中解釋了這裡的 V8 不是 javascript 引擎 V8,而是 Node.js 的版本。但是在 Node.js 官方博文 Node v8.0.0 (Current) 中有一段注釋:
Note that, when referring to Node.js release versions, we have dropped the "v" in Node.js 8. Previous versions were commonly referred to as v0.10, v0.12, v4, v6, etc. In order to avoid confusion with V8, the underlying JavaScript engine, weve dropped the "v" and call it Node.js 8.
請注意,當引用 Node.js 發布版本時,我們已經在 Node.js 8 中刪除了 「v」。以前的版本通常被稱為 v0.10,v0.12,v4,v6 等。為了避免與 V8 JavaScript 引擎混淆,我們放棄了 「v」 並將其稱為 Node.js 8。
所以,Node.js v8 版本應該直接稱為 Node.js 8。
由於 Node.js 使用的 JavaScript引擎不知道什麼時候會引入新功能,開發者們都像明確的知道不同引擎在性能方面的性能優劣。
我們對以下幾個 Node.js 版本做了性能評估:
- Node.js 6.10.1 (V8 5.1.281.95)* Node.js 7.10 (V8 5.5.372.43)
- Node.js 7.10 使用 --turbo --ignition 參數 (V8 5.5.372.43)
- Node.js 8.0 (V8 5.8.283.41)
- Node.js 8.0 使用 --turbo --ignition 參數 (V8 5.8.283.41)
- Node.js 8.0 (ChaKraCore 2.0.0.0) (使用 2 種不同的構建版本)
你可以通過這個簡單的 可視化工具 查看不同版本對於不同特性的性能。
在這些結果中,如果你使用的是 Node.js 8,你還可以查看開啟 --turbo --ignition 參數後的 javascript 性能。
Context
雖然 V8 是 Node.js 使用的默認 JavaScript 引擎,但是 Node.js 提供了一個通用的平台,允許開發者選擇不同的 JavaScript 引擎。
Node.js 8 的發布非常令人興奮,並且是社區內的一件大事。該平台已附帶一套全新功能。此外,開發者最關注的就是性能。
了解哪種 JavaScript 引擎最適合運行應用程序將成為一項非常有用的技能。 在本文中,我們將看到 V8 和 ChakraCore 的不同版本在性能方面的優劣。
方式
要比較不同 Node.js 版本之間的基準測試,我選擇了有代表意義的 35 種 JavaScript 代碼模式。他們中的大多數都是從 Colin Ihrig』s 『will it optimize』 的 repo 中獲取的。這些模式已經在前面的文章(Optimize your Node app by simply upgrading Node.js)中討論過了。
對於每個模式,分別使用了每個不同版本的 Node.js 運行 10 次、100 次、1000 次、10000次和 10000 次。 通過允許這些代碼,我們呢可以了解每個引擎如何進行運行時常規優化和熱函數(hot function)優化。
基準測試沒有考慮垃圾收集(GC)事件的數量。 這意味著如果修改分配給每個進程的內存,則實驗的結果可能會不同。
結果
在 這個頁面 可以查看完整的測試結果。通過分析這個結果,我們可以發現 ChakraCore 的 Node.js 版本比基於 V8 的版本慢。
此外,在大多數情況下,隨著時間的遷移 V8 變得越來越高效。Ignition 和 Turbofan 優化架構很顯著地提升了性能。 Node.js 8 隨 V8 5.8 發布,但是 默認並沒有啟用。 Node.js 的未來版本將隨著啟用了 Ignition 和 Turbofan 的 V8 5.9(也可能是 5.6)一起提供。
結論
這個基準測試非常有趣,我計劃在將來增加更多的 Node.js 版本和更多的代碼模式。作為Sqreen 的 Node.js 工程師,我非常關心性能。
(譯註:後面還有 4 端內容,大部分都是原作者的廣告,就不翻譯了)
最後推薦作者開發的這個強大的性能可視化對比工具:Picking the best JS engine for your Node app』s performance
EOF
推薦閱讀:
※V8 中的垃圾收集(GC),圖文指南
※隱藏在 Node.js 浮點反序列化錯誤背後的故事
※V8 中的 Fast 屬性
※新手應該如何讀Google V8引擎源代碼?
※阿里雲前端周刊 - 第 25 期