RN拆分包的本質(zhì)是什么源请?
RN項(xiàng)目開發(fā)完成后,通過RN打包命令可以將JSX的語法通過Node 的babel 模塊轉(zhuǎn)換成低版本的的JS代碼(各個(gè)瀏覽器通用的JS代碼)彻况,打成bundle包后供Native使用谁尸。
那么拆分包的本質(zhì)是什么?
我們知道Native執(zhí)行RN的模塊是通過JSContext執(zhí)行的纽甘,執(zhí)行js bundle通過如下方式:
其中traggedScript.script.bytes就是從打好的JS bundle 文件中讀取的良蛮。
因此,拆分包的核心就是將RN 項(xiàng)目中JS代碼做一個(gè)邏輯劃分悍赢,通過特定的算法將RN項(xiàng)目拆分成兩個(gè)部分决瞳,一部分是RN運(yùn)行的核心JS代碼部分,稱之為Core.bundle左权,另一部分皮胡,是業(yè)務(wù)部分,稱之為business.bundle赏迟。
拆分后屡贺,客戶端在加載某個(gè)RN模塊后就變成了:
JSContext 執(zhí)行Core.bundle代碼
JSContext 執(zhí)行business.bundle代碼
這樣,JSContext環(huán)境里锌杀,就有了所有的業(yè)務(wù)代碼了甩栈。
let's run.
那么為什么我們要拆分包呢?
1.如果執(zhí)行遠(yuǎn)程的RN代碼糕再,可以只加載business.bundle量没,然后和本地的core.bundle合并,這樣做到節(jié)約用戶流量的目的突想。
2.Native端殴蹄,可以內(nèi)存緩存Core.bundle的內(nèi)容究抓,然后執(zhí)行RN代碼的時(shí)候,將內(nèi)存中把Core.bundle 內(nèi)容加載進(jìn)當(dāng)前模塊對應(yīng)的JSContext饶套,然后在加載business.bundle,這樣將加速整個(gè)RN的加載過程漩蟆。
好處多多,why not ...