h5緩存技術(shù)研究

攔截原理

image.png

開發(fā)步驟

  1. 先使用本地的資源 不走加載 , 大量閱讀業(yè)界秒開方案 做筆記 核心點(diǎn)記錄
  2. ios 和安卓出demo 實(shí)現(xiàn)秒開
  3. ios 和安卓對項目中某個頁面進(jìn)行改造 實(shí)現(xiàn)秒開
    3.1) 需要解決劫持的問題 安全組評估
    3.2) 對當(dāng)前的h5 加載時間打點(diǎn) , 方便后續(xù)評估效果 , 并且h5 console 里面出控制臺
    3.3) 離線包不對 或者下載不成功 就直接用線上資源

https://mp.weixin.qq.com/s/ye1CeIjlfs9VSUab3gQI5g
3.4) loadHTMLString 加載本地的html , js 請求json 數(shù)據(jù) callJSMethod 注入到html
https://juejin.cn/post/6887161842406260744 (40%處有講) 針對不同模板通過枚舉區(qū)別,
注入不同模板數(shù)據(jù)
3.5) WKURLSchemeHandler 進(jìn)行攔截

  1. 設(shè)計后臺 .批量上線 方案 可以大面積被推廣
    4.1) 準(zhǔn)備2套方案 備用容災(zāi) 快速切換
    4.2) JS 框架和 CSS 全局樣式 公共資源包 (活動類的html 和css 模板內(nèi)置或者下載)
  2. 關(guān)鍵步驟 增加log 方便排查 , 驗(yàn)收效果
  3. 方案 是否擴(kuò)展到web 端 的網(wǎng)頁加載 , 提高web 端的頁面打開速度 (和web 一起共用管理后臺,資源管理后臺 )

主要優(yōu)化點(diǎn):

1.降低請求量:合并資源炼幔,減少 HTTP 請求數(shù)史简,minify / gzip 壓縮圆兵,webP,lazyLoad殉农。
2.加快請求速度:預(yù)解析DNS超凳,減少域名數(shù)耀态,并行加載暂雹,CDN 分發(fā)。
3.緩存:HTTP 協(xié)議緩存請求仙逻,離線緩存 manifest涧尿,離線數(shù)據(jù)緩存localStorage。
4.渲染:JS/CSS優(yōu)化喜最,加載順序庄蹋,服務(wù)端渲染,pipeline虫蝶。

大體的優(yōu)化思路

大體優(yōu)化思路就是:緩存/預(yù)加載/并行倦西,緩存一切網(wǎng)絡(luò)請求,盡量在用戶打開之前就加載好所有內(nèi)容粉铐,能并行做的事不串行做卤档。這里有些優(yōu)化手段需要做好一整套工具和流程支持劝枣,需要跟開發(fā)效率權(quán)衡,視實(shí)際需求優(yōu)化溪胶。

h5緩存 使用到的重要api總結(jié)

canInitWithRequest

+ (BOOL)canInitWithRequest:(NSURLRequest *)request{
    BOOL intercept = YES;
    NSLog(@"YXNSURLProtocol==%@",request.URL.absoluteString);
    if (intercept) {
        
    }
    return intercept;
}

如果返回YES則進(jìn)入該自定義加載器進(jìn)行處理稳诚,如果返回NO則不進(jìn)入該自定義選擇器,使用系統(tǒng)默認(rèn)行為進(jìn)行處理懒熙。
如果這一步驟返回YES。則會進(jìn)入2.3的方法中徘钥。

canonicalRequestForRequest

+ (NSURLRequest *)canonicalRequestForRequest:(NSURLRequest *)request {
    return request;
}

在這個方法中肢娘,我們可以重新設(shè)置或者修改request的信息。比如請求重定向或者添加頭部信息等等而钞。如果沒有特殊需求拘荡,直接返回request就可以了珊皿。但是因?yàn)檫@個方法在會在一次請求中被調(diào)用多次(暫時我也不知道什么原因?yàn)槭裁葱枰卣{(diào)多洗),所以request重定向和添加頭部信息也可以在開始加載中startLoading方法中重新設(shè)置粉臊。

registerClass

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    [NSURLProtocol registerClass:[YXNSURLProtocol class]];
}

加載完成后驶兜,當(dāng)產(chǎn)生URL請求的同時,會依次進(jìn)入NSURLProtocol的以下相關(guān)方法進(jìn)行處理屠凶,下面我們依次來講一下每一個方法的作用肆资。

requestIsCacheEquivalent

+ (BOOL)requestIsCacheEquivalent:(NSURLRequest *)a toRequest:(NSURLRequest *)b{
    return [super requestIsCacheEquivalent:a toRequest:b];
}

這個方法主要是用來判斷兩個request是否相同迅耘,如果相同的話可以使用緩存數(shù)據(jù)监署,通常調(diào)用父類的實(shí)現(xiàn)即可

人員準(zhǔn)備

web人員溝通

Js還是比較關(guān)鍵的,圖片異步加載栖秕,沒問題晓避,主要是js只壳,首先得讓頁面展示出來

相關(guān)產(chǎn)品溝通

節(jié)省流量, 打開頁面更快 , 產(chǎn)品層面確認(rèn)有價值 后續(xù)實(shí)施的重要基礎(chǔ)

服務(wù)端管理人員

上傳包 , 分版本下載 (類似RN的包 或者jspatch包) , 分需求加載

離線寶步驟自動化

參考文獻(xiàn)

iOS H5秒開技術(shù)實(shí)戰(zhàn)(一)綜述
http://www.cocoachina.com/articles/28999

介紹了多種攔截方式 ,

  1. 《cordova》框架便是基于此實(shí)>現(xiàn)吼句。
  2. 基于NSURLProtocol進(jìn)行請求攔 wkWebView 涉及私有函數(shù) ,
  3. 百度解到百度App安>卓就是采用的請求攔截方式,>https://mp.weixin.qq.com/s/AqQgDB-0dUp2ScLkqxbLZg

iOS app秒開H5優(yōu)化探索
https://juejin.cn/post/6844903809521549320

講了NSURLProtocol
讓wkwebView 支持https://blog.moecoder.com/2016/10/26/support-nsurlprotocol-in-wkwebview/
講了WKURLSchemeHandler , 給了一個比較詳細(xì) 的例子

iOS app秒開H5實(shí)戰(zhàn)總結(jié)
https://juejin.cn/post/6844903860977287176

重點(diǎn)講了如何攔截 ,好好研究下

iOS H5容器的一些探究(二):iOS下的黑魔法NSURLProtocol 不使用
http://www.reibang.com/p/03ddcfe5ebd7

網(wǎng)易新聞客戶端H5秒開優(yōu)化(值得借鑒 下載相關(guān)的) - 一般都是下載zip 包 比較好 , md5校驗(yàn)
https://www.163.com/dy/article/F0RO3P1005376OPS.html

WKWebView之oc調(diào)用js以及WKUserScript JS注入
WKUserScript 中注入js
http://www.reibang.com/p/75a487c8e927

為什么你做的H5開屏那么慢惕艳?H5首屏秒開方案探討
https://mp.weixin.qq.com/s/ye1CeIjlfs9VSUab3gQI5g

講了很多細(xì)節(jié) , 無具體的方案實(shí)施

今日頭條品質(zhì)優(yōu)化:圖文詳情頁秒開實(shí)踐 -0.3秒 詳解了拆分js 和css , 講了容災(zāi)方案
https://juejin.cn/post/6876011410061852680


WKWebview秒開實(shí)踐分享及問題解決方案 - 有swift 代碼和demo 還有拆分的代碼

image.png

https://juejin.cn/post/6887161842406260744

有講如何通過HTML 加載方法 本地html+請求json 的方法 類似lbmeng


h5秒開github 搜索
https://github.com/search?q=h5+%E7%A7%92%E5%BC%80

https://github.com/yuweiguocn/TouTiaoH5 安卓

h5秒開demo
https://github.com/PhoenixLeeSin/wkwebviewAndJS (ios 和js 傳值的過程 )

iOS WKWebView與JS交互远搪、傳值逢捺,H5調(diào)相機(jī)相冊劫瞳、進(jìn)度條加載等(干貨滿滿)
可能這套和js 和oc 的交互方法 就可以實(shí)現(xiàn)傳值
http://www.reibang.com/p/0f825df61037

wkwebView scheme 寫出本地html 緩存方案
http://cache.baiducontent.com/c?m=OPhPXw3Ba4-7m74tVfOcr9SbMzgZP45TeutyF4iRvTNJWSBg5mRGVdpbfbp36em1DQ0vvTMZwfEew8fDuZRiOU-GwUlGgjh4wy3M3V3cWnENtBWPs0A4NZjrQ3tdBOUW&p=8039cf16d9c104b434bd9b7e0e42&newp=8974c54ad6c00bf644acc7710f5c92695d0fc20e3ddcdb01298ffe0cc4241a1a1a3aecbf2c211402d3c3786605a44f5de8f634743d0034f1f689df08d2ecce7e65d13b75&s=072b030ba126b2f4&user=baidu&fm=sc&query=wkwebView+URLScheme&qid=836524d00004b130&p1=17

http://www.reibang.com/p/9ac63625256f

提供urlSchem 攔截的樣例和demo , 提供可運(yùn)行的demo , schem 方案 網(wǎng)易的參考意義很大

  • WKWebView-WKURLSchemeHandler-master 參考意義大 詳細(xì)描寫如何去攔截有html 的實(shí)例

  • herald-ios-app-master 網(wǎng)絡(luò)加載方案

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末柠新,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子蕊退,更是在濱河造成了極大的恐慌憔恳,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,277評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件输硝,死亡現(xiàn)場離奇詭異程梦,居然都是意外死亡屿附,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,689評論 3 393
  • 文/潘曉璐 我一進(jìn)店門褒翰,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人朵你,你說我怎么就攤上這事揣非。” “怎么了魂拦?”我有些...
    開封第一講書人閱讀 163,624評論 0 353
  • 文/不壞的土叔 我叫張陵搁嗓,是天一觀的道長腺逛。 經(jīng)常有香客問我,道長棍矛,這世上最難降的妖魔是什么够委? 我笑而不...
    開封第一講書人閱讀 58,356評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮玉罐,結(jié)果婚禮上潘拨,老公的妹妹穿的比我還像新娘。我一直安慰自己季蚂,他們只是感情好琅束,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,402評論 6 392
  • 文/花漫 我一把揭開白布涩禀。 她就那樣靜靜地躺著,像睡著了一般埋泵。 火紅的嫁衣襯著肌膚如雪丽声。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,292評論 1 301
  • 那天浴井,我揣著相機(jī)與錄音霉撵,去河邊找鬼。 笑死撕氧,一個胖子當(dāng)著我的面吹牛喇完,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播不脯,決...
    沈念sama閱讀 40,135評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼防楷,長吁一口氣:“原來是場噩夢啊……” “哼则涯!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起粟判,我...
    開封第一講書人閱讀 38,992評論 0 275
  • 序言:老撾萬榮一對情侶失蹤浮入,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后彤断,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體易迹,經(jīng)...
    沈念sama閱讀 45,429評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡睹欲,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,636評論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了袋哼。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,785評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡诽嘉,死狀恐怖虫腋,靈堂內(nèi)的尸體忽然破棺而出稀余,到底是詐尸還是另有隱情,我是刑警寧澤雏门,帶...
    沈念sama閱讀 35,492評論 5 345
  • 正文 年R本政府宣布掸掏,位于F島的核電站,受9級特大地震影響募闲,放射性物質(zhì)發(fā)生泄漏愿待。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,092評論 3 328
  • 文/蒙蒙 一要出、第九天 我趴在偏房一處隱蔽的房頂上張望患蹂。 院中可真熱鬧砸紊,春花似錦、人聲如沸醉顽。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,723評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽找都。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間啰扛,已是汗流浹背隐解。 一陣腳步聲響...
    開封第一講書人閱讀 32,858評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留帕涌,地道東北人续徽。 一個月前我還...
    沈念sama閱讀 47,891評論 2 370
  • 正文 我出身青樓钦扭,卻偏偏與公主長得像纫版,于是被迫代替她去往敵國和親其弊。 傳聞我的和親對象是個殘疾皇子膀斋,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,713評論 2 354

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