![ReactNative啟動性能優(yōu)化指南_第1頁](http://file4.renrendoc.com/view/f63ff8cb0db8ae79e27f69b0f8605710/f63ff8cb0db8ae79e27f69b0f86057101.gif)
![ReactNative啟動性能優(yōu)化指南_第2頁](http://file4.renrendoc.com/view/f63ff8cb0db8ae79e27f69b0f8605710/f63ff8cb0db8ae79e27f69b0f86057102.gif)
![ReactNative啟動性能優(yōu)化指南_第3頁](http://file4.renrendoc.com/view/f63ff8cb0db8ae79e27f69b0f8605710/f63ff8cb0db8ae79e27f69b0f86057103.gif)
![ReactNative啟動性能優(yōu)化指南_第4頁](http://file4.renrendoc.com/view/f63ff8cb0db8ae79e27f69b0f8605710/f63ff8cb0db8ae79e27f69b0f86057104.gif)
![ReactNative啟動性能優(yōu)化指南_第5頁](http://file4.renrendoc.com/view/f63ff8cb0db8ae79e27f69b0f8605710/f63ff8cb0db8ae79e27f69b0f86057105.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、ReactNative啟動性能優(yōu)化指南技術(shù)創(chuàng)新,變革未來為什么跨平臺?效率動態(tài)修復(fù)技術(shù)選型原生 + React Native 0.41按業(yè)務(wù)分bundle減小bundle體積局部動態(tài)修復(fù)雙刃劍加載速度慢不夠穩(wěn)定Part1:當(dāng)前的優(yōu)化方案Part2:未來的優(yōu)化方向Part1:當(dāng)前的優(yōu)化方案基石每次都初始化bridge,慢!Bridge實例較多,內(nèi)存占用高!Bridge全局緩存,只初始化一次。提高二次加載速度同業(yè)務(wù)共享bridge。如果有N個業(yè)務(wù),最多有N個bridge實例。提高同業(yè)務(wù)頁面加載速度,減少內(nèi)存使用。Bridge復(fù)用接口集成復(fù)用和緩存邏輯副作用避免沖突并發(fā)加載留意“初始化”代碼RNBu
2、ndle *bundle = RNBundleManager sharendInstance bundleWithName:name;bundle loadBridge: (RCTBridge *bridge) RCTRootView *rootView = RCTRootView allocinitWithBridge:bridgemoduleName:mobile initialProperties:mProps copy;rootView.frame = self.view.bounds; self.view addSubview: rootView;一個Bridge對應(yīng)多個界面,可能造
3、成數(shù)據(jù)沖突!RN為每個root view分配唯一root tag,并同步到JS??衫么藰?biāo)識來區(qū)分不 同root view的數(shù)據(jù)。以下類型數(shù)據(jù)可能發(fā)生沖突:全局變量單例事件用戶有可能快速切換頁面,導(dǎo)致重復(fù)加載。標(biāo)記某個bridge是否正在加載。如果在加載中,則不執(zhí)行加載。在加載完成后,統(tǒng)一調(diào)用回調(diào)block。Bridge復(fù)用可能導(dǎo)致一些只需要執(zhí)行一次的代碼被執(zhí)行多次。5004504003503002502001501005001234567891011121314151617181920優(yōu)化前耗時(MS)優(yōu)化后耗時(MS)優(yōu)勢簡單易實現(xiàn)。對RN源代碼無侵入。劣勢沒有做到核心、業(yè)務(wù)代碼拆分,造成
4、核心代碼多次加載。核心部分JS不能被多個業(yè)務(wù)共享。不同業(yè)務(wù)之間不能通過JS來跳轉(zhuǎn),只能推新的Container VC。還是不夠快!Part2:未來的優(yōu)化方向探究只有一個bridge。核心代碼和業(yè)務(wù)代碼分離到不同bundle。核心bundle只加載一次。業(yè)務(wù)bundle實現(xiàn)懶加載。探究bundle文件結(jié)構(gòu)。修改打包流程。實現(xiàn)業(yè)務(wù)包懶加載。三個組成部分:定義polyfills。定義模塊(JS文件)。執(zhí)行入口代碼。ModuleIdBundle中JS模塊的唯一標(biāo)識。定義、獲取模塊都通過這個標(biāo)識。生成全局唯一moduleId。使用文件存取用過的moduleId。下次打包時,直接取用上次生成好的modul
5、eId。如果沒有,產(chǎn)生一個 新id并存儲。分離核心、業(yè)務(wù)代碼。使用模塊路徑判斷是否為核心代碼。根據(jù)條件過濾掉不需要的代碼。業(yè)務(wù)包在最后手動require入口模塊。/ 生成moduleIdfunction createModuleIdFactory() return (path: modulePath) = if (!(modulePath in fileToIdMap) globalfileToIdMapmodulePath = globalfileToIdMapnextId; globalfileToIdMapnextId += 1;return globalfileToIdMapmodul
6、ePath;/ 讀文件var fs = require(fs)var module2Id = fs.readFileSync(/Users/admin/module2Id, utf-8) globalfileToIdMap = JSON.parse(module2Id) | nextId: 0 / 寫文件fs.writeFile(/Users/admin/module2Id, JSON.stringify(globalfileToIdMap), err = console.log(err)核心包包含RN源碼、路由系統(tǒng)。業(yè)務(wù)包包含本業(yè)務(wù)所有頁面的路由配置、所有業(yè)務(wù)模塊。跳轉(zhuǎn)到一個未注冊路由的頁面
7、時,嘗試加載業(yè)務(wù)包。需要維護(hù)頁面和業(yè)務(wù)包 的關(guān)系。function loadPage (navigator, name) if (!route.hasRoute(name) let map = page1: business1, page2: business1, page3: business2NativeModules.RNDynamic.loadJSBundle(mapname).finally() = navigator.push(route.getRoute(name)returnnavigator.push(route.getRoute(name)RCT_EXPORT_METHOD
8、(loadJSBundle:(NSString *)bundleName fullfil:(RCTPromiseResolveBlock)fullfil reject:(RCTPromiseRejectBlock)reject) NSString *bundleURL = NSBundle mainBundle pathForResource:bundleName ofType:jsbundle;if (!bundleURL) reject(0, 0, nil); return;NSData *jsData = NSData dataWithContentsOfFile:bundleURL;id exe = self.bridge moduleForName:RCTBridgeModuleNameForClass(NSClassFromString(RCTJSCExecutor); exe executeApplicationScript:jsDatasourceURL:NSURL URLWithString:bundleURL onC
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 湘教版數(shù)學(xué)七年級上冊3.3《一元一次方程模型的應(yīng)用》聽評課記錄3
- 小學(xué)二年級口算題之一
- 五年級口算競賽題
- 店鋪出租合同范本
- 小區(qū)弱電合同范本
- 2025年度車位物業(yè)管理與社區(qū)老年活動中心服務(wù)合同
- 2025年度智能小區(qū)物業(yè)與業(yè)主服務(wù)合同模板范文
- 二零二五年度離婚后子女撫養(yǎng)費及教育支持協(xié)議
- 國際科技合作項目專題合作協(xié)議書范本
- 2025年度電影音樂創(chuàng)作與制作聘用合同
- 我國全科醫(yī)生培訓(xùn)模式
- 淺談建筑工程機(jī)電安裝施工技術(shù)運用論文
- 《字體設(shè)計》模塊五 裝飾性變化設(shè)計技巧的訓(xùn)練
- 《摔跤吧爸爸》觀后感PPT
- FRENIC 5000G11S、P11S富士變頻器操作說明書
- 機(jī)構(gòu)編制重要事項的報告范文(5篇)
- DBJ51-T 188-2022 預(yù)拌流態(tài)固化土工程應(yīng)用技術(shù)標(biāo)準(zhǔn)
- 《長津湖》電影賞析PPT
- Q-GDW 11274-2014 風(fēng)電無功電壓自動控制技術(shù)規(guī)范
- GB/T 18838.3-2008涂覆涂料前鋼材表面處理噴射清理用金屬磨料的技術(shù)要求第3部分:高碳鑄鋼丸和砂
- CPR和AED培訓(xùn)考核試題附答案
評論
0/150
提交評論