RN bundle自動(dòng)化靜態(tài)掃描

背景

起因是在排查公寓找室友bundle過(guò)大問(wèn)題時(shí),發(fā)現(xiàn)house-middle-sdk體積異常,逐個(gè)刪減引用得出結(jié)論是引用了node-forge庫(kù)導(dǎo)致,通過(guò)這次手動(dòng)排查經(jīng)歷演化出做一個(gè)bundle自動(dòng)化靜態(tài)掃描的想法。

介紹

安裝

npm i house-cli -g

使用

根目錄添加metro.config.js文件

//里面引用全局路徑(這個(gè)后面優(yōu)化一下)
module.exports = require('/Users/haojie/WorkSpace/house-cli/scripts/index.js')

house-explorer

功能點(diǎn)

輸出 bundle總大小、按包統(tǒng)計(jì)模塊大小并顯示百分比、按包輸出所有js文件的module文件

原理

基于metro的Serialization環(huán)節(jié)捕獲到每個(gè)module,然后將其分析。原本打算侵入源碼分析,但難度過(guò)大,因?yàn)樯婕暗絩eact-native-cli以及react-native和metro源碼的調(diào)用,所以最后折中采取在processModuleFilter環(huán)節(jié)分析的做法。缺陷在于目前沒(méi)有做包的依賴庫(kù)分析。

公寓找室友掃描結(jié)果分析

image.png

左側(cè)為公寓數(shù)據(jù)、右側(cè)為找室友數(shù)據(jù)

從分析數(shù)據(jù)來(lái)看總bundle大小相差200kb,業(yè)務(wù)代碼均占比很高基本在40%或以上,把node-forge庫(kù)優(yōu)化后業(yè)務(wù)代碼占比會(huì)更高。后期或可針對(duì)App業(yè)務(wù)代碼做進(jìn)一步數(shù)據(jù)分析。因?yàn)檫@兩個(gè)業(yè)務(wù)上可能存在多個(gè)相似文件,所以存在可優(yōu)化空間。其他占比較大的分別是house-middleware-sdk、mobx、react-navigation、recvclerview、house-middleware-components這些庫(kù)可優(yōu)化空間不大、最多把sdk做成按需引入。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容