Facebook JavaScript 引擎 (Hermes) 在 Android 上提升 React Native
已發表: 2019-11-18為 Android 設備引入新的 JavaScript Facebook 工具可以縮短啟動時間、降低 RAM 的使用並減少應用程序的大小。 目前,該工具是 React Native 中的一個可選功能。 大多數 Facebook react Native Android 最新版本的產品都已經開始使用這個 JavaScript 工具。
- 更多關於 Facebook for Android 設備 JavaScript 引擎的信息
- 新的 Android JavaScript 引擎的特點
- 如何獲得愛馬仕
- 反應
- 適用於 Android 設備的 Facebook JavaScript 引擎的主要架構決策
- 1.字節碼預編譯
- 2.沒有JIT
- 3. 廢物收集技術
- 結論
更多關於 Facebook for Android 設備 JavaScript 引擎的信息

JavaScript Facebook for Android 設備工具的創建是為了增強大型 Android 應用程序的功能。 電話應用程序的大小不斷增加,這很容易帶來問題,例如當您在缺乏足夠空間或強大處理能力的小工具中下載 Facebook 應用程序時。 這也是 Facebook 等公司為其應用開發“精簡版”Android 版本的主要原因。
現在,Android 應用程序創建者可以通過 JavaScript 工具增強任何應用程序的功能。 該工具減小了下載的大小並增強了啟動功能。 這就是 Facebook 更新打算為其使用 JavaScript Facebook for Android 設備引擎的應用程序所做的事情。
Facebook 團隊分析了性能信息,發現 JavaScript Facebook for Android 設備工具對於下載大小和一般啟動功能至關重要。 知道了這一點後,他們覺得需要優化 JavaScript 在高度壓抑的便攜式設備環境中的正常執行方式。 另一方面,桌面環境很好,Android 的 Facebook 桌面版功能出色。
適用於 Android 設備的 JavaScript Facebook 工具有助於改進 3 個主要功能。 他們是:
- TTI(交互時間):這是啟動應用程序到完全加載所需的時間。
- 下載的大小。
- 內存的利用。
推薦給你: React Native vs Flutter vs PWA:熱門移動應用框架之戰。
新的 Android JavaScript 引擎的特點

- 工作將在構建時執行,而不是在人們等待時解析和組合 JavaScript on-gadget。
- 提前編譯允許更多增強的優化。 類似的活動可能會出現在程序中並被刪除。 JavaScript 代碼字符串將以良好的存儲方式組合在一起,無需運行時開銷。
- 體積很小的 Android APK 可以在內存較少的設備上安裝 Facebook 應用程序或任何其他應用程序。
- 字節碼可能會被內存映射並根據需要越來越多地從閃存加載。
- 虛擬地址區域在需要時以塊的形式分配。 這避免了確定堆大小的需要,並且還最大限度地減少了開銷。
- 使用 Hermes 實現 JavaScript 標準,目標是 ECMAScript2015,也稱為 ES6。 移除了在 React Native 應用程序中不常應用的 JavaScript 特性。
如何獲得愛馬仕

適用於 Android 設備的 JavaScript Facebook 引擎可供下載。 您無法從 Facebook 下載,目前可在 GitHub 上下載。 React Native 站點上提供了有關如何使用它的指南。
反應

但是 React Native 有一些缺點,這也是大多數人不喜歡它的原因。 例如:在線遊戲應用程序和其他 Android 應用程序功能需要本地代碼,例如當它們需要備份相機和傳感器之間的集成時。 此外,Android 開發人員總是需要設計橋樑以填補結構和原生代碼之間的空間。 這也是Airbnb決定退出的原因。

但 JavaScript Facebook for Android 設備引擎可能是 Facebook 為 React Native 帶來更多活力並說服更多人接受它的一種手段。
考慮到 JavaScript Facebook for Android 設備引擎只專注於應用程序,Facebook 透露他們不打算將其與服務器或搜索引擎集成。
適用於 Android 設備的 JavaScript Facebook 引擎是來自 Facebook 的最新開源項目。 更多當前的 Android 項目包括:
- Pythia:深度學習框架。
- DLRM:深度學習模型。
- Spectrum:一個旨在使上傳圖片的過程高效的項目。
您可能會喜歡:編程簡介:Node JS、Laravel、React、Ruby、Vue 和 Python 簡介。
適用於 Android 設備的 Facebook JavaScript 引擎的主要架構決策

移動設備的限制,例如慢速閃存和小 RAM 量,使 Facebook 做出了一些架構決策。 以下是他們實施的事情:
1.字節碼預編譯

為了避免這種情況,Facebook 應用程序 android 設備 JavaScript 引擎使用了在應用程序構建過程下運行的提前編譯器。 這導致在字節碼優化上花費更多時間。 這意味著字節碼更小更有用。
可以優化整個程序。 這包括去重操作和打包字符串表。
字節碼的構建方式在運行時將被映射到內存並被解釋,而無需遍歷整個文件。 閃存改善了大多數中等質量和劣質移動設備的延遲。 因此,這會在必要時從閃存加載字節碼,並且字節碼的大小優化帶來了極大的 TTI 增強。
此外,由於內存映射僅由文件讀取和支持,因此不交換的操作系統可能仍會在內存壓力下刪除這些頁面。 這將最大限度地減少內存較少的小工具中的內存不足進程終止。
被壓縮的字節碼比同樣被壓縮的 JavaScript 代碼略大。 之所以如此,是因為適用於 Android 設備的 JavaScript Facebook 引擎代碼體積很小。 適用於 Android 設備的 JavaScript Facebook 引擎降低了 Android 應用程序的大小。
2.沒有JIT

適用於 Android 設備的 Facebook 應用 JavaScript 引擎沒有 JIT 工具,這意味著它在依賴 CPU 的基準測試中表現不佳。 這個決定是全球性的。 總體而言,基準並不代表應用程序的工作量。
Facebook 甚至使用 JIT 進行了各種測試,他們確信在不惡化主要指標的情況下,要達到高速是不容易的。 每當應用程序啟動時,JTI 必須首先做好準備,這使得 TTI 難以增強,甚至會損害 TTI。 除此之外,JIT 會影響本機代碼的大小和內存消耗。 這破壞了 Facebook 的主要指標。 這就是為什麼 Facebook Android 決定忽略它,轉而關註解釋器的性能,作為 JavaScript Facebook for Android 設備引擎的最佳權衡。
3. 廢物收集技術

在最初的 Facebook Android 測試中,發現虛擬地址空間可能在 32 位小工具上的大型應用程序中受到限制。
為了減少引擎使用的內存和虛擬地址空間,Facebook 設計了一個具有以下功能的垃圾收集器。
- 按需分配:必要時以塊的形式分配虛擬地址空間。
- 非連續:虛擬地址空間應該在一個內存範圍內,以消除資源限制。
- 移動:移動對象意味著內存可能會碎片化,而不必要的塊會被帶回操作系統。
您可能還喜歡: Angular vs React:2019 年選擇哪個框架。
結論

JavaScript Facebook for Android devices 項目是 Facebook 團隊正在開展的眾多項目之一。 該團隊也期待創造記憶和時間分析方法。 這將使 Android 專家可以輕鬆地增強他們的應用程序。 測試適用於 Android 設備的 JavaScript Facebook 引擎並查看其功能。 與我們分享您的經驗,如果您有任何問題,也可以向我們提問。
本文由托馬斯·米勒撰寫。 他是一位 Android 技術專家,喜歡向人們介紹最新技術。 Thomas 也喜歡 JavaScript Facebook for Android 設備引擎的想法,並且已經使用它並且喜歡它的工作原理。 他還在 autoexpertguides.com 上彙編了汽車行業的最佳專家評論。
