Facebook 開源 Hermes JavaScript 引擎

Facebook 開源輕量級 JavaScript 引擎 愛馬仕,針對運行基於該框架的應用程式進行了最佳化 反應原生 在Android平台上。 愛馬仕支持 內建 從今天的 0.60.2 版本開始,在 React Native 中。 此專案旨在解決原生JavaScript應用程式啟動時間長、資源消耗大的問題。 程式碼 書面 用 C++ 編寫並根據 MIT 許可證分發。

使用 Hermes 的優點包括減少應用程式啟動時間、減少記憶體消耗以及減少應用程式大小。 使用 V8 時,最耗時的階段是解析原始程式碼並動態編譯的階段。 Hermes 將這些步驟引入構建階段,並允許以緊湊且高效的字節碼形式交付應用程式。

為了直接執行應用程序,專案中開發的虛擬機與SemiSpace 垃圾收集器一起使用,該收集器僅根據需要(按需)分配區塊,支援區塊的移動和碎片整理,將釋放的記憶體返回給作業系統,而無需定期掃描整個堆的內容。

JavaScript 處理分為幾個階段。 首先,解析原始程式碼並產生程式碼的中間表示(赫爾墨斯紅外線),基於表示 公共福利金 (靜態單一分配)。 接下來,中間表示在優化器中進行處理,優化器應用前向靜態優化技術將主要中間程式碼轉換為更有效的中間表示,同時保留程式的原始語義。 在最後階段,產生已註冊虛擬機器的字節碼。

在引擎中 支持 ECMAScript 2015 JavaScript 標準的一部分(最終目標是完全支援它),並提供與大多數現有 React Native 應用程式的相容性。 Hermes 決定不支援 eval()、語句、反射(Reflect 和 Proxy)、Intl API 和 RegExp 中的一些標誌的本機執行。 要在 React Native 應用程式中啟用 Hermes,只需將「enableHermes: true」選項新增至專案即可。 也可以在 CLI 模式下建立 Hermes,允許您從命令列執行任意 JavaScript 檔案。 延遲編譯模式可用於偵錯,它允許您在開發過程中不必每次都編譯 JavaScript,而是動態產生裝置上已有的字節碼。

同時,Facebook 並不打算將Hermes 應用於Node.js 和其他解決方案,只專注於行動應用程式(在RAM 有限且Flash 速度較慢的行動系統環境中,AOT 編譯而不是JIT 是最佳選擇)。 由微軟員工進行的初步效能測試 顯露使用 Hermes 時,Android 版 Microsoft Office 應用程式可在 1.1 秒內使用。 啟動後消耗21.5MB RAM,而使用V8引擎時啟動時間為1.4秒,消耗記憶體30MB。

新增:臉書 опубликовал 自己的測試結果。 當 Hermes 與 MatterMost 應用程式結合使用時,啟動工作時間(TTI,互動時間)從 4.30 秒減少到 2.01 秒,APK 套件大小從 41 MB 減少到 22 MB,記憶體消耗從 185 減少到 136 MB。

來源: opennet.ru

添加評論