React?Native采用Hermes熱更新打包方案詳解
1, 背景
如果我們打開RN的Android源碼,在build.gradle中回看到這樣一段代碼。
if (enableHermes) { def hermesPath = "../../node_modules/hermes-engine/android/"; debugImplementation files(hermesPath + "hermes-debug.aar") releaseImplementation files(hermesPath + "hermes-release.aar") } else { implementation jscFlavor }
此段代碼的含義是,如果開啟了就采用新的hermes,如果未開啟則采用老的jsc加載引擎。Hermes 是專門針對 React Native 應(yīng)用而優(yōu)化的全新開源 JavaScript 引擎。對于很多應(yīng)用來說,啟用 Hermes 引擎可以優(yōu)化啟動時間,減少內(nèi)存占用以及空間占用。
2,熱更新傳統(tǒng)方案
在傳統(tǒng)的熱更新方案中,我們實(shí)現(xiàn)熱更新需要借助code-push開源方案,熱更新包的發(fā)布有兩種方式:
- code-push release-react:打bundle并自動上傳
- code-push release:需先打bundle,再通過該命令上傳
如果采用code-push release-reactapp熱更新后,殺掉進(jìn)程重新進(jìn)入,app首屏加載的時候速度會很慢,甚至可能出現(xiàn)白屏。這是因為生成的bundle只是通過babel編譯轉(zhuǎn)碼,然后經(jīng)過js壓縮和削減,代碼的執(zhí)行效率并不高。
而開啟Hermes引擎后,可以執(zhí)行純文本的 JS 代碼,效率比替換js引擎前更低,執(zhí)行效率也更高。
3,使用Hermes打包
首先,我們執(zhí)行react-native bundle命令進(jìn)行打包,比如。
react-native bundle --platform android --entry-file index.android.js --bundle-output ./bundles/index.android.bundle --assets-dest ./bundles --dev false
接下來,我們需要將bundle轉(zhuǎn)成字節(jié)碼。轉(zhuǎn)化前,我們需要先下載hermes-engine。
npm i hermes-engine
接著,執(zhí)行如下命令將bundle轉(zhuǎn)換成字節(jié)碼
cd node_modules/hermes-engine/oxs-bin ./hermesc -emit-binary -out index.android.bundle.hbc /Users/xxxx/work/react-native/app/bundles/index.android.bundle
將之前bundle目錄下的index.android.bundle刪掉,將當(dāng)前的index.android.bundle.hbc重命名為index.android.bundle,再移動到之前bundle目錄下。最后,使用下面的命令執(zhí)行 bundle熱更新包的發(fā)布。
code-push release AndroidAppNamexx ./bundles 1.0.0 --d Staging --des "描述" --m true
使用這種方式后,下次有熱更新的時候,加載的速度比之前也有明顯的提升,特別是bundle包內(nèi)容比較大的時候。
到此這篇關(guān)于React Native采用Hermes熱更新打包方案詳解的文章就介紹到這了,更多相關(guān)React Native熱更新內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
React+EggJs實(shí)現(xiàn)斷點(diǎn)續(xù)傳的示例代碼
這篇文章主要介紹了React+EggJs實(shí)現(xiàn)斷點(diǎn)續(xù)傳的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-07-07react-router-dom v6版本跳轉(zhuǎn)路徑的實(shí)現(xiàn)方法
這篇文章主要介紹了react-router-dom v6版本跳轉(zhuǎn)路徑的實(shí)現(xiàn)方法,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-03-03ahooks封裝cookie?localStorage?sessionStorage方法
這篇文章主要為大家介紹了ahooks封裝cookie?localStorage?sessionStorage的方法示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-07-07解決React報錯Property value does not exist&n
這篇文章主要為大家介紹了React報錯Property value does not exist on type HTMLElement解決方法詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-12-12關(guān)于useEffect執(zhí)行兩次的問題及解決
這篇文章主要介紹了關(guān)于useEffect執(zhí)行兩次的問題及解決,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-09-09詳解使用WebPack搭建React開發(fā)環(huán)境
這篇文章主要介紹了詳解使用WebPack搭建React開發(fā)環(huán)境,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-08-08React-Native之截圖組件react-native-view-shot的介紹與使用小結(jié)
這篇文章主要介紹了React-Native之截圖組件react-native-view-shot的介紹與使用小結(jié),需本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,要的朋友可以參考下2021-08-08