ReactNative(二)RN拆包,patch補(bǔ)丁爆安,diff差異文件升級方案

RN拆包叛复,patch補(bǔ)丁,diff差異文件升級方案

前瞻

目前已有的思路有以下

    1. 侵入RN代碼,修改打包流程抖僵,使得打出來的包就是基礎(chǔ)+業(yè)務(wù)* 包鲤看,如QQ音樂
    1. 在RN打包的基礎(chǔ)上,實(shí)現(xiàn)新的打包方案耍群,如攜程 moles-Packer
  • 3.Patch方案义桂,打包流程不變,生成基礎(chǔ)包后蹈垢,根據(jù)diff來生成每個業(yè)務(wù)不同的patch補(bǔ)丁
  • 由于人力慷吊,技術(shù),以及各個方面不可能滿足前兩種曹抬,我們也隨大流溉瓶,和網(wǎng)上眾多developer一起,用第三種”補(bǔ)丁"方案

這里對第三種 Patch補(bǔ)丁方案進(jìn)行深入的探討和記錄

warning:以下拆包針對rn打出的bundle包谤民,和上一次討論的npm拆模塊不一樣堰酿。

一、設(shè)計(jì)思路:

  • 單元:多個完整的業(yè)務(wù)包张足,只有一個基礎(chǔ)包触创,多個業(yè)務(wù)補(bǔ)丁
  • 通俗理解: 完整的業(yè)務(wù)包(被減數(shù)) 基礎(chǔ)包(減數(shù)) 業(yè)務(wù)補(bǔ)丁(差/補(bǔ)丁)

二、拆包流程:

  • 1.打基礎(chǔ)包(制作commont包”減數(shù)")

    <1.創(chuàng)建一個單純的为牍,里面只導(dǎo)入公有庫哼绑。

    例如index.ios.js,只導(dǎo)入
    
    importReactfrom'react';
    
    import{}from'react-native';
    

    <2.然后通過我們以前的打包命令碉咆,打出RN包抖韩,輸出基礎(chǔ)包文件命名為:

    commont.jsbundle
    

    乍眼一看,554kb疫铜,0.37.0的版本茂浮,這個就是最基礎(chǔ)的rn包

  • 2.打完整的業(yè)務(wù)包(制作“被減數(shù)”)

    <1.開始在項(xiàng)目中填寫業(yè)務(wù)代碼,形成一個完整的模塊壳咕。
    
    <2.然后通過我們以前的打包命令励稳,打出RN包,輸出完整的業(yè)務(wù)包文件命名為:     
    
     one.jsbundle和two.jsbundle
    
  • 3.生成業(yè)務(wù)補(bǔ)丁(制作”差/補(bǔ)丁")

    <1.先創(chuàng)建一個.patch文件囱井,例如做one.jsbundle包的補(bǔ)丁命名為one.patch
    
    <2.打開以下網(wǎng)址
    

    https://neil.fraser.name/software/diff_match_patch/svn/trunk/demos/demo_patch.html

    通過網(wǎng)址在線生成差異文件
    左邊放基礎(chǔ)包驹尼,右邊放完整的業(yè)務(wù)包,下面輸出的內(nèi)容庞呕,就是差異內(nèi)容
    通過網(wǎng)址在線生成差異文件
    

    <3.copy到one.patch新翎,現(xiàn)在one.patch就是我們的補(bǔ)丁

三程帕、iOS項(xiàng)目如何設(shè)計(jì)

  • 目的:加載完整的業(yè)務(wù)包(我們目前只有基礎(chǔ)包和補(bǔ)丁,要獲取業(yè)務(wù)包)

  • 其實(shí)通俗理解為:減數(shù)(基礎(chǔ)包)+差(補(bǔ)兜貑)=被減數(shù)(完整的業(yè)務(wù)包)

  • 這里用到了一個第三方庫愁拭,DiffMatchPatch 是一個國人開源的,OC+C的亏吝,谷歌的算法庫

  • 使用時導(dǎo)入頭文件 DiffMatchPatch.h 即可使用暴露出來的方法

  • 核心代碼如下岭埠,demo已寫出來,運(yùn)行ok蔚鸥。


    img

    PS:

  • 1惜论、你的ios項(xiàng)目現(xiàn)在更輕量了,rn的bundle包止喷,里面只需要基礎(chǔ)包馆类、業(yè)務(wù)補(bǔ)丁、資源assets文件夾和plist版本文件弹谁。截圖少了一個assets文件夾是因?yàn)閐emo很簡單- -#沒有圖片也沒有版本plist文件

  • 2乾巧、這里僅僅做了本地是否有合成后的文件

       擴(kuò)展:
    
       <1.我們以后熱更新,只需要更新圖片資源文件夾预愤、plist版本信息文件沟于、和補(bǔ)丁。
    
       <2.可以本地保存一份文件植康,專門用來記錄合包后的包版本號社裆,與更新下來的包版本對比,若不同向图,再次生成并記錄。做到每一次熱更新/更新app标沪,只合一次包榄攀。
    
       <3.有了第2步,那么這里的找文件代碼可能要修改一下金句,加一些合成包對應(yīng)的版本判斷檩赢,是否需要重新合并替換。這些都看你自己業(yè)務(wù)需求了~
    

    打補(bǔ)丁時的文件大小變化紀(jì)錄:


    img

    PS:有人問违寞,為何554301+1278 != 555306

  • 因?yàn)檠a(bǔ)丁文件內(nèi)容贞瞒,有一些附要信息(例如那行有區(qū)別,需要替換)趁曼,這些附要信息合成后不會跟進(jìn)去

  • 寫入過程耗時不可避免军浆,demo簡單,所以寫的快挡闰。
    怎么設(shè)計(jì)這個寫入的時機(jī)和過程乒融,我也不啰嗦掰盘,自己下去設(shè)計(jì)吧~

四、surprised赞季!看看我們打補(bǔ)丁前的文件大小和打補(bǔ)丁后的文件大小!

基礎(chǔ)包:

img

兩個補(bǔ)丁的大小

img

img

兩個完整業(yè)務(wù)包的大小:

img

img

以及通過補(bǔ)独⒉丁+基礎(chǔ)包的打補(bǔ)丁方式生成的本地大小:

img
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末申钩,一起剝皮案震驚了整個濱河市次绘,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌撒遣,老刑警劉巖邮偎,帶你破解...
    沈念sama閱讀 206,311評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異愉舔,居然都是意外死亡钢猛,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,339評論 2 382
  • 文/潘曉璐 我一進(jìn)店門轩缤,熙熙樓的掌柜王于貴愁眉苦臉地迎上來命迈,“玉大人,你說我怎么就攤上這事火的『撸” “怎么了?”我有些...
    開封第一講書人閱讀 152,671評論 0 342
  • 文/不壞的土叔 我叫張陵馏鹤,是天一觀的道長征椒。 經(jīng)常有香客問我,道長湃累,這世上最難降的妖魔是什么勃救? 我笑而不...
    開封第一講書人閱讀 55,252評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮治力,結(jié)果婚禮上蒙秒,老公的妹妹穿的比我還像新娘。我一直安慰自己宵统,他們只是感情好晕讲,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,253評論 5 371
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著马澈,像睡著了一般瓢省。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上痊班,一...
    開封第一講書人閱讀 49,031評論 1 285
  • 那天勤婚,我揣著相機(jī)與錄音,去河邊找鬼涤伐。 笑死蛔六,一個胖子當(dāng)著我的面吹牛荆永,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播国章,決...
    沈念sama閱讀 38,340評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼具钥,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了液兽?” 一聲冷哼從身側(cè)響起骂删,我...
    開封第一講書人閱讀 36,973評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎四啰,沒想到半個月后宁玫,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,466評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡柑晒,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,937評論 2 323
  • 正文 我和宋清朗相戀三年欧瘪,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片匙赞。...
    茶點(diǎn)故事閱讀 38,039評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡佛掖,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出涌庭,到底是詐尸還是另有隱情芥被,我是刑警寧澤,帶...
    沈念sama閱讀 33,701評論 4 323
  • 正文 年R本政府宣布坐榆,位于F島的核電站拴魄,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏席镀。R本人自食惡果不足惜匹中,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,254評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望豪诲。 院中可真熱鬧顶捷,春花似錦、人聲如沸跛溉。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,259評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽芳室。三九已至,卻和暖如春刹勃,著一層夾襖步出監(jiān)牢的瞬間堪侯,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評論 1 262
  • 我被黑心中介騙來泰國打工荔仁, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留伍宦,地道東北人芽死。 一個月前我還...
    沈念sama閱讀 45,497評論 2 354
  • 正文 我出身青樓,卻偏偏與公主長得像次洼,于是被迫代替她去往敵國和親关贵。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,786評論 2 345