自如首創iOS圖片資源極致優化方案(二)
圖片管理一期概述
以元件的維度,圖片和元件之間建立一對一關係,在打包的時候或者本地開發執行指令碼的時候動態拉圖圖片,這些圖片在服務端進行去重,以zip包的形式下載到本地,用指令碼將本地的圖片打成xcasset包匯入到工程中,從而實現服務端管理app圖片的能力。這樣做的好處是圖片的大小、是否缺圖、增刪操作等資料都可以拿到,後續還可以對未使用過的圖片進行雲控處理
如何處理分支關係
問題
元件A在多人同時開發的情況下,從A拉出倆開發分支featureM、featureN,featureM新增一個圖片m1,featureN移除一個圖片m2,當featureM合併之後元件多了一個圖片m1,featureN也有這個關係就會包含倆圖片(m1,m2),這樣就有問題了,因為featureN並沒有合併,還在開發中,不應該有圖片m1.
這就涉及到同一個元件分支和圖片的對應關係的問題了
圖片和元件的關聯關係,應該是圖片和元件的分支或者版本號關聯,同一個元件,不同分支不同版本號所關聯的圖片都應該是獨立的。
處理問題的方案
gitlab中的程式碼倉庫加上hook,當有人push程式碼的時候就能監聽到,每個公司應該都有自己的分支管理方案,我們是分支合併的時候必須merge request,這樣服務端能拿到hook事件,觸發分析merge操作,獲取到源分支和目標分支以及提交人資訊。這時候需要把源分支的圖片關係合併到目標分支。圖片的繫結關係應該是和元件的版本號或者分支一一對應的
圖片同步方案
1、分支建立和push方式合併程式碼的邏輯梳理 (1)建立分支觸發push事件(feature分支和release分支建立時的圖片依賴關係的初始化);
(2)當通過push的方式將程式碼合併到develop,release或者master分支時,圖片依賴關係的同步;
風險點1:基於master建立分支時,圖片元件依賴關係為develop分支的依賴關係;(需要保證沒有隻合併了master,但是沒有同步到develop的需求)
風險點2:直接通過push方式(沒有通過mr合併)合併develop,release,master,需要保證commit資訊中包含:【分支名稱】標籤
2、mr方式合併程式碼邏輯梳理
3、定時任務更新圖片元件依賴關係流程梳理
4、圖片元件依賴關係同步的具體執行邏輯
5、監控方案
6、結論總結 6.1 建立分支時,圖片元件依賴關係會從develop分支同步到新分支 6.2 feature之間的圖片元件依賴關係需要研發人員手動建立同步任務進行同步 6.3 feature到develop分支,release分支,master分支的圖片元件依賴關係同步,需要藉助於webhook,自動進行同步。 (1)push 事件的webhook需要藉助【分支名】標籤,獲取源分支名稱 (2)mr的webhook可以通過引數拿到明確的源分支和目標分支 6.4 風險: (1)元件webhook缺失
5.解決辦法 (1)監控並自動補充webook
(2)避免使用push方式合併develop,release,master分支程式碼(回收所有人的許可權,並設定為保護分支)
總結
本期分享的是服務端處理方案邏輯,下期我們分享iOS客戶端的實現邏輯 後期我們會對資源管理系統進行繼續詳細分享
自如大前端研發中心招募新同學! FE/IOS/Android工程師看過來
公司福利有: 全額五險一金,並額外購買商業保險 免費健身房+年度體檢 公司附近租房9折優惠 每年2次晉升機會
辦公地點:北京酒仙橋普天實業科技園 歡迎對技術有執著熱愛的你加入我們!簡歷請投遞 [email protected]!