Facebook 開源 JavaScript引擎Hermes:顯著降低啓動時間和內存使用

近日,Facebook開源了JavaScript引擎Hermes,該引擎旨在提高React原生App在Android設備上的性能,尤其是啓動性能、安裝文件大小和內存消耗。微軟Office和Mattermost(Slack的一個開源替代品)的初步基準測試都證實了這一點。

Hermes源於Facebook內部一個提高自身移動應用性能的項目。工程師們注意到其中一個關鍵因素是JavaScript引擎本身,所以他們決定針對移動應用受限的環境對引擎進行優化

在探索了其他選項後,我們構建了一個全新的JavaScript引擎Hermes。它旨在提高應用程序的性能,專注於提高React原生應用,尤其是那些部署在內存有限、存儲緩慢、計算能力下降的大衆市場設備上的應用。

如上所述,Hermes關注於三個指標:應用程序從啓動到可用所需的時間(首次交互時間,縮稱TTI)、應用安裝文件大小(APK大小)和內存利用率。Facebook介紹了他們爲改進這些指標所做的三個主要架構決定:預編譯JavaScript源代碼,拋棄JIT編譯器以及改進垃圾收集策略以適應移動操作系統的限制。

將JavaScript預編譯成字節碼對性能有兩個關鍵的好處。一方面,前向解析和直接編譯減少了啓動時間。另一方面,由於預編譯階段對時間限制要求更小,通常生成的字節碼也更小、更有效,編譯器可以對程序整體進行優化,如函數重複數據刪除和字符串表打包等。在字節碼格式的前端,Hermes字節碼可以映射到內存中,而不需要提前讀取整個文件,這對於使用緩慢閃存的情況尤其有效,並減少了應用由於過度使用內存而被操作系統殺死的情形。

此外,Facebook還維護了一個對CPU密集型工作負載進行了優化的JIT編譯器,而這些工作負載並不是典型的移動應用程序。但是,同之前的優化相比(縮短TTL時間,減小本機代碼大小和內存消耗),不使用該JIT編譯器也不會產生很大的影響, 作爲移動應用程序的最終性能優化,Hermes使用了垃圾內存收集策略,旨在最小化應用程序由於內存使用而被移動操作系統殺死的機率。Hermes垃圾收集器試圖減少總體虛擬內存的消耗,爲此實現了非連續塊內存的按需分配,在不再需要時,這些內存可被移動和返回給操作系統。

如上所述,Facebook和微軟的初始基準測試在所有三個指標上都顯示出了顯著的增長。特別是,Slack的替代品Mattermost將其TTL時間以及其應用程序大小減半,整體內存利用率下降了25%。微軟Office在所有指標上也提高了20-25%的性能

Facebook並沒有將其新的JavaScript引擎定位爲V8的替代品,他們仍然認爲V8最適合Node和基於瀏覽器的應用程序。值得注意的是,iOS應用程序只能使用iOS開發包中包含的JavaScript引擎,因此它們無法從Hermes的優化中獲益。

原文鏈接:

Facebook Hermes May Significantly Reduce Boot-time and Memory Usage in Android React Native Apps

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章