RN增量更新node
Rn增量更新是最近項目的一個想法,可是到目前忽然對增量更新產生了懷疑,有大牛路過也能夠指導一二。那麼我先拋出懷疑的問題,而後重頭開始講。這個問題就是:算法
RN增量更新真的要每次上包把每一個版本都要打一個增量包嗎?這不是維護起來太扯淡了……ruby
好,咱們重頭開始說。所謂RN增量更新,就是說RN的熱更新啊(此處暫時不考慮iOS的appStore更新)每次須要從服務器下載jsBundle包,那麼因爲熱更新可能只是更新一個小小的點,因此這樣每次從新下載jsBundle包就有一部份內容總是屢次重複下載。這個重複下載的部分就大概包括,ReactNative自己的代碼部分+以前你寫的老代碼。因此咱們但願RN增量更新就是每次更新的jsBundle只是一個增量包(增量包=新包-ReactNative自己的代碼-以前的老代碼),更新完增量包之後再和你線上的jsBundle合併起來,那麼這個問題的第一步就是:服務器
我該怎樣把一個jsBudle包分紅舊包和新包?答案是用diff算法。app
這個diff算法我也不想弄明白了,反正是谷歌出的1種算法,谷歌的叫Diff Match Patch算法,而後有的博士寫論文又弄成別的什麼bsdiff什麼的,總之用這個diff算法的東西特別多。spa
我實驗了用node安裝,試驗了用ruby安裝,還有直接拖進項目裏的,最後感受用brew安裝的會快一點,命令的話就是brew install。cdn
bsdiff命令: 1.生成拆分包: 命令:bsdiff old.file new.file add.patch ,即old.file是舊的文件,new.file是新更改變化的文件,add.patch是這兩個文件的差別文件. 2.舊文件和差分包合成新文件: 命令:bspatch old.file createNew.file add.patch 其中createNew.file是合併後的新文件blog
關於文件格式的話,我試過能夠拆分txt,能夠拆分zip,PS:咱們的RN項目打完包就是zip格式的,由於裏面除了有jsBudle,還有原生項目裏的asset文件。可是生成的拆分包,都是patch格式的。都是啥啥啥.pat。ip
好了,這個弄明白的話,咱們就能夠拆分包的事情能夠在本地作,也能夠交給服務器去作,可是咱們從服務器下載patch文件後的合併必定要本身作。it
這個首先是本地拆分文件的代碼:
而後這個是本地合併文件的代碼:
合併文件的地址只要咱們從咱們下載的地址更改一下就好了。
一開始我說的問題就是那麼若是RN從1.0,到2.0到3.0到100.0,咱們難道在第100次上線的時候要上100個增量包嗎?
也有的文章討論說,咱們只要去除掉RN部分代碼的包,作增量包就能夠了,這樣作法是很簡單,可是還有沒有必要了呢?
不過增量更新仍是一個值得了解的技術,由於我後面發現騰訊bugly出的app秒開h5更新方案裏面好像也有增量更新的影子,那麼app秒開h5方案,等我作完再聊。
話說天氣真的很熱,最近996的話題好像很火熱。我想那些資本大佬在山頂呆的久了,不免會有時候忘記山腳下的樣子。你在山頂上996,和我在山底下996能同樣麼?
還有有時候老有人拿奮鬥當誘餌來勾引人,我就想知道奮鬥就是努力上班嗎?人就應該堅持不懈的奮鬥嗎?努力過好每一天,讓本身天天都開心,算不算奮鬥呢?
並且講道理那些資本大佬的奮鬥若論艱苦程度我感受還比不上我爺爺當紅軍那時候呢,爲何他們老能夠吹來吹去的……