混合開發(fā):離線包方案

業(yè)務(wù)量大的手機(jī)客戶端非常適合使用混合開發(fā)方案,開發(fā)效率高抚岗,熱更新,技術(shù)成熟哪怔。好的混合開發(fā)方案宣蔚,既不是完全依仗 H5 前端(客戶端甚至只有一個 WebView 殼),也不是只摻雜少量 H5 頁面(只有一些展示頁是 H5)认境,應(yīng)該是發(fā)揮 H5 和 Native 的各自優(yōu)勢胚委,緊密的配合。如叉信,H5 的導(dǎo)航就可以借助原生導(dǎo)航 混合開發(fā): 原生導(dǎo)航替代瀏覽器導(dǎo)航 Web 頁 js-native-navigation亩冬,兩者相互配合實(shí)現(xiàn)體驗(yàn)的提升巴柿,離線包方案也是其中之一蠢棱。

常用優(yōu)化方案

重度的混合開發(fā)面臨的主要問題就是頁面的加載效率幻赚,弱網(wǎng)的情況下簡直讓人抓狂靶橱。提升頁面的加載效率的主要方法就是使用緩存,眾多緩存方案中营袜,最常使用的就是瀏覽器緩存機(jī)制撒顿,服務(wù)器配置 Cache-Control:max-age=3153600 緩存時間為一年(任意的足夠長時間),而前端資源文件名都帶有 hash 值连茧,如 xxx.6sdf9sdf.js核蘸,資源文件內(nèi)容發(fā)生變化,對應(yīng)的 hash 值也要發(fā)生變化啸驯,如此就能更好的使用瀏覽器緩存客扎,消滅 304,提升頁面的加載效率罚斗。如何對項目資源的文件名徙鱼,資源的 hash 進(jìn)行維護(hù),就要使用 webpack 工具针姿,在編譯的時候自動幫我們做這些事袱吆。也可以用 service-worker 做緩存,但是 service-worker 的兼容性還不夠理想距淫。

還有一種方案就是離線包方案绞绒,簡單來說,就是客戶端提前將資源下載到客戶端本地存儲榕暇,Webview 從本地加載 H5 頁面及相關(guān)資源蓬衡。說起來簡單,但是實(shí)現(xiàn)起來并不容易彤枢,且會涉及一些問題需要解決狰晚,如接口請求的跨域問題,差量更新問題缴啡,更新失敗的線上應(yīng)急處理等壁晒。
插圖:

混合開發(fā)-離線包示意簡圖.png

離線包實(shí)現(xiàn)邏輯

下面我詳細(xì)敘述下離線包方案的前后臺邏輯。
項目首次上線业栅,后管上傳一份全量離線版本和全量線上版本 1.0秒咐,客戶端第一次啟動時,需要向后臺發(fā)送一個檢查更新接口碘裕,帶上離線包的版本號反镇,第一次啟動沒有離線包,所以版本號送空即可娘汞。后臺會返回 1.0 版本的離線包下載地址,客戶端靜默下載夕玩,并保存到本地你弦。如果下載失敗惊豺,不具備加載離線包的情況下,使用線上版本訪問禽作。

服務(wù)器上有:
1.0 離線包 1.0 線上包

項目更新迭代到了 1.1 版本
后管上傳 1.1 的全量離線包和 1.1 的全量線上包尸昧,后臺對 1.1 和 1.0 的全量離線包進(jìn)行差量比較分析,打包出一份 1.1-1.0 版本的差量離線包旷偿。1.0 線上包做歸檔烹俗,清除∑汲蹋客戶端啟動時幢妄,發(fā)檢查版本請求,上送本地的離線包版本號茫负,服務(wù)端返回對應(yīng)客戶端本地離線包版本的差量更新包蕉鸳,下載完成后,與本地包進(jìn)行文件 merge忍法。merge 完成則更新本地的離線包版本號潮尝。

服務(wù)器上有
1.0 全量離線包(供比對分析用)
1.1 差量離線包(供用戶下載)  1.1 全量離線包     1.1 全量線上包

項目繼續(xù)更新迭代到 1.2 版本
后管上傳 1.2 的全量離線包和 1.2 的全量線上包,后臺對 1.2 和 1.1饿序,1.0 的全量離線包分別進(jìn)行差量比較分析勉失,打包出一份 1.2-1.1 和 1.2-1.0 版本的差量離線包。 1.1 的差量包和線上包可以歸檔原探,清除乱凿。客戶端邏輯同上

服務(wù)器上有
1.0 全量離線包
1.1 全量離線包
1.2 全量離線包踢匣,1.2 - 1.1 差量包告匠,1.2 - 1.0 差量包,1.2 線上包

項目再次更新迭代离唬,以此類推后专,如果本地不想保存過多的差量包,可以設(shè)置如果舊版本號超出兩個版本输莺,則使用新版本的全量更新離線包進(jìn)行更新戚哎。

客戶端的 Webview 訪問本地資源,前端的 Api 請求需要借助原生來發(fā)送請求接口(js-native 交互)來解決跨域問題嫂用。

方案優(yōu)缺點(diǎn)對比

方案 優(yōu)點(diǎn) 缺點(diǎn)
瀏覽器緩存 輕量型凳,實(shí)現(xiàn)簡單 瀏覽器緩存大小限制
離線包方案 無緩存大小限制,控制靈活嘱函,可以緩存任意資源 實(shí)現(xiàn)復(fù)雜甘畅,開發(fā)成本較大

總結(jié)

業(yè)務(wù)量較大,重度混合開發(fā)項目,且公司具備足夠的研發(fā)資源可以使用離線包方案疏唾。業(yè)務(wù)量一般蓄氧,或輕混合開發(fā),或研發(fā)資源緊張的公司不適合離線包方案槐脏。

參考文章

移動web緩存介紹
webpack 持久化緩存實(shí)踐

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末喉童,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子顿天,更是在濱河造成了極大的恐慌堂氯,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,470評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件牌废,死亡現(xiàn)場離奇詭異咽白,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)畔规,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,393評論 3 392
  • 文/潘曉璐 我一進(jìn)店門局扶,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人叁扫,你說我怎么就攤上這事三妈。” “怎么了莫绣?”我有些...
    開封第一講書人閱讀 162,577評論 0 353
  • 文/不壞的土叔 我叫張陵畴蒲,是天一觀的道長。 經(jīng)常有香客問我对室,道長模燥,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,176評論 1 292
  • 正文 為了忘掉前任掩宜,我火速辦了婚禮蔫骂,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘牺汤。我一直安慰自己辽旋,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,189評論 6 388
  • 文/花漫 我一把揭開白布檐迟。 她就那樣靜靜地躺著补胚,像睡著了一般。 火紅的嫁衣襯著肌膚如雪追迟。 梳的紋絲不亂的頭發(fā)上溶其,一...
    開封第一講書人閱讀 51,155評論 1 299
  • 那天,我揣著相機(jī)與錄音敦间,去河邊找鬼瓶逃。 笑死束铭,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的厢绝。 我是一名探鬼主播纯露,決...
    沈念sama閱讀 40,041評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼代芜!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起浓利,我...
    開封第一講書人閱讀 38,903評論 0 274
  • 序言:老撾萬榮一對情侶失蹤挤庇,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后贷掖,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體嫡秕,經(jīng)...
    沈念sama閱讀 45,319評論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,539評論 2 332
  • 正文 我和宋清朗相戀三年苹威,在試婚紗的時候發(fā)現(xiàn)自己被綠了昆咽。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,703評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡牙甫,死狀恐怖掷酗,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情窟哺,我是刑警寧澤泻轰,帶...
    沈念sama閱讀 35,417評論 5 343
  • 正文 年R本政府宣布,位于F島的核電站且轨,受9級特大地震影響浮声,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜旋奢,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,013評論 3 325
  • 文/蒙蒙 一泳挥、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧至朗,春花似錦屉符、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,664評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至粤蝎,卻和暖如春真仲,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背初澎。 一陣腳步聲響...
    開封第一講書人閱讀 32,818評論 1 269
  • 我被黑心中介騙來泰國打工秸应, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留虑凛,地道東北人。 一個月前我還...
    沈念sama閱讀 47,711評論 2 368
  • 正文 我出身青樓软啼,卻偏偏與公主長得像桑谍,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子祸挪,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,601評論 2 353

推薦閱讀更多精彩內(nèi)容

  • Swift1> Swift和OC的區(qū)別1.1> Swift沒有地址/指針的概念1.2> 泛型1.3> 類型嚴(yán)謹(jǐn) 對...
    cosWriter閱讀 11,097評論 1 32
  • 有朋自遠(yuǎn)方來锣披,延請至陸和村茶館清談。 友是兒時的舊友贿条,也是閨中的密友雹仿,小學(xué)、初中整以、高中胧辽,上學(xué)放學(xué),扭股糖似的纏做一...
    北河一笛閱讀 571評論 8 20
  • 今天上午主要學(xué)習(xí)了心理咨詢從電話接待到一個大概的心理咨詢的流程和一些注意事項公黑,還學(xué)習(xí)到一些初次接待的細(xì)節(jié)處理邑商,怎么...
    丶青衣素酒灬閱讀 157評論 0 1
  • 一、學(xué)習(xí)目標(biāo) 1凡蚜、 了解 Gradle Plugin 的作用是什么人断? 2、 如何去定義一個 Gradle Plug...
    未見哥哥閱讀 28,852評論 5 24
  • 文|阿左 【引言】 回首和女兒相處的日日夜夜,點(diǎn)點(diǎn)滴滴芹务,我益發(fā)覺得:書籍與閱讀之于孩子蝉绷,正如雨露與陽光之于植物,說...
    AZ雕刻孤獨(dú)AZ閱讀 864評論 2 12