29期_iOS_WKWebView的緩存機制

iOS應(yīng)用開發(fā)赵辕,使用WKWebView加載Web界面,對于頻繁訪問的Web頁面类咧,特別是移動端的Web應(yīng)用,用戶需要使用時快速加載出來蟹腾,這就需要依賴緩存機制支持痕惋,在WKWebView中,緩存機制分為兩種娃殖,內(nèi)存緩存和磁盤緩存

以下WKWebView簡稱wk

內(nèi)存緩存

內(nèi)存緩存是WkWebView自帶的緩存機制值戳,可以在較短時間快速讀取已緩存的資源文件,提高頁面打開速度炉爆,內(nèi)存方案主要使用WKProcessPool對象管理多個WKWebView實例的緩存池堕虹,其中每個WKWebView都有自己的緩存。當(dāng)WKWebView打開網(wǎng)頁芬首,WKProcessPool對象查詢自己管理的緩存是否有匹配的緩存赴捞,如果有,則立即讀取緩存資源并渲染頁面郁稍,提高性能和速度赦政。

開啟內(nèi)存緩存

內(nèi)存緩存是默認開啟的,可以通過一下WKWebViewConfiguration獲取

WKWebViewConfiguration *config = [[WKWebViewConfiguration alloc]init];
WKProcessPool *processPool = config.processPool;

清理內(nèi)存緩存

內(nèi)存緩存會隨著WK轉(zhuǎn)移而釋放耀怜,但是如果占用過多恢着,可以手動清理

NSArray * types =@[WKWebsiteDataTypeMemoryCache,WKWebsiteDataTypeDiskCache]; // 9.0之后才有的
NSSet *websiteDataTypes = [NSSet setWithArray:types];
NSDate *dateFrom = [NSDate dateWithTimeIntervalSince1970:0];
[[WKWebsiteDataStore defaultDataStore] removeDataOfTypes:websiteDataTypes modifiedSince:dateFrom completionHandler:^{
        }];

磁盤緩存

磁盤緩存是將Web資源文件緩存在設(shè)備本地磁盤,以便于下次訪問可以更快讀取财破,在WK中掰派,緩存文件位于Library/Cache目錄,可以在設(shè)備本地進行讀取和存儲狈究。磁盤緩存方案一般采用URL緩存存儲機制碗淌,和H5緩存存儲機制盏求。

開啟磁盤緩存

開啟磁盤緩存需要使用,NSURLCache對象

NSURLCache *sharedCache = [[NSURLCache alloc] initWithMemoryCapacity:2 * 1024 * 1024
                                                            diskCapacity:100 * 1024 * 1024
                                                                diskPath:nil];
[NSURLCache setSharedURLCache:sharedCache];

清理磁盤緩存

[NSURLCache.sharedURLCache removeAllCachedResponses];

采用問答形式簡述WK緩存策略

  • 什么情況下會緩存數(shù)據(jù)
    客戶端第一次訪問網(wǎng)絡(luò)資源亿眠,如果響應(yīng)頭不包含(Expire碎罚、Cache-Control:max-age、Last-modifired等)纳像,那么不會緩存荆烈,下次直接發(fā)起請求。如果響應(yīng)頭包含了緩存控制字段竟趾,大多數(shù)情況下這些數(shù)據(jù)會被緩存憔购,下次啟訪問的時候執(zhí)行緩存邏輯判斷

  • 什么情況每次都需要校驗資源更新
    響應(yīng)頭包含cache-control:max-ahe或者pragma:no-cache
    響應(yīng)頭只有etag字段,沒有過期時間和修改時間

  • 緩存過期時間多久
    響應(yīng)頭中cache-control:max-age=1800;表示緩存過期時間30分鐘
    響應(yīng)頭Expire值表示過期時間(服務(wù)器時間)
    響應(yīng)頭岔帽,如果沒上述兩個字段玫鸟,但有l(wèi)ast-modifired字段,則觸發(fā)啟發(fā)式緩存犀勒,緩存時間(date_value - last_modifired_value ) *0.1

  • 資源校驗更新的過程是怎樣的

revalidated的指標(biāo)有兩個屎飘,last-modifired和etag,這兩個字段位于響應(yīng)頭中贾费,客戶端每次發(fā)起都會將這兩個指標(biāo)回調(diào)給服務(wù)器钦购,if-last-modifired對應(yīng)last-modifired的值,if-no-macth對應(yīng)etag的值褂萧,服務(wù)器進行對比押桃,客戶端最新資源返回304,服務(wù)器最新返回200和響應(yīng)數(shù)據(jù)

wk緩存流程總結(jié)

  1. 是否有緩存导犹,沒有則直接發(fā)起請求唱凯。有則進行下一步。
    是否Ahe-Control:no-cache 或 Pragma:no-cache 字段
  2. 是否有緩存锡足,沒有則直接發(fā)起請求波丰。有則進行下一步。
    是否每次都得進行資源更新校驗(響應(yīng)頭是否有 Cache-Control:no-cache 或 Pragma:no-cache 字段)舶得,不需要則進入3掰烟,需要則進入4
  3. 緩存是否過期(響應(yīng)頭,Cache-Control:max-age沐批、Expires纫骑、Last-Modified 啟發(fā)式緩存),沒過期則使用緩存九孩,不發(fā)起請求先馆。過期了則進入 4。
  4. 客戶端發(fā)起資源更新校驗請求(請求頭躺彬,If-Modified-Since : Last-Modified值煤墙、If-None-Match : ETag值)梅惯,如果資源沒有更新,服務(wù)器返回 304仿野,客戶端使用緩存铣减;如果資源有更新,服務(wù)器返回 200 和資源
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末脚作,一起剝皮案震驚了整個濱河市葫哗,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌球涛,老刑警劉巖劣针,帶你破解...
    沈念sama閱讀 207,113評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異亿扁,居然都是意外死亡捺典,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,644評論 2 381
  • 文/潘曉璐 我一進店門魏烫,熙熙樓的掌柜王于貴愁眉苦臉地迎上來辣苏,“玉大人,你說我怎么就攤上這事哄褒。” “怎么了煌张?”我有些...
    開封第一講書人閱讀 153,340評論 0 344
  • 文/不壞的土叔 我叫張陵呐赡,是天一觀的道長。 經(jīng)常有香客問我骏融,道長链嘀,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,449評論 1 279
  • 正文 為了忘掉前任档玻,我火速辦了婚禮怀泊,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘误趴。我一直安慰自己霹琼,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 64,445評論 5 374
  • 文/花漫 我一把揭開白布凉当。 她就那樣靜靜地躺著枣申,像睡著了一般。 火紅的嫁衣襯著肌膚如雪看杭。 梳的紋絲不亂的頭發(fā)上忠藤,一...
    開封第一講書人閱讀 49,166評論 1 284
  • 那天,我揣著相機與錄音楼雹,去河邊找鬼模孩。 笑死尖阔,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的榨咐。 我是一名探鬼主播介却,決...
    沈念sama閱讀 38,442評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼祭芦!你這毒婦竟也來了筷笨?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,105評論 0 261
  • 序言:老撾萬榮一對情侶失蹤龟劲,失蹤者是張志新(化名)和其女友劉穎胃夏,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體昌跌,經(jīng)...
    沈念sama閱讀 43,601評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡仰禀,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,066評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了蚕愤。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片答恶。...
    茶點故事閱讀 38,161評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖萍诱,靈堂內(nèi)的尸體忽然破棺而出悬嗓,到底是詐尸還是另有隱情,我是刑警寧澤裕坊,帶...
    沈念sama閱讀 33,792評論 4 323
  • 正文 年R本政府宣布包竹,位于F島的核電站,受9級特大地震影響籍凝,放射性物質(zhì)發(fā)生泄漏周瞎。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,351評論 3 307
  • 文/蒙蒙 一饵蒂、第九天 我趴在偏房一處隱蔽的房頂上張望声诸。 院中可真熱鬧,春花似錦退盯、人聲如沸彼乌。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,352評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽囤攀。三九已至,卻和暖如春宫纬,著一層夾襖步出監(jiān)牢的瞬間焚挠,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,584評論 1 261
  • 我被黑心中介騙來泰國打工漓骚, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留蝌衔,地道東北人榛泛。 一個月前我還...
    沈念sama閱讀 45,618評論 2 355
  • 正文 我出身青樓,卻偏偏與公主長得像噩斟,于是被迫代替她去往敵國和親曹锨。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,916評論 2 344

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

  • https://www.cnblogs.com/lxlx1798/articles/14259055.html 注...
    小黑技術(shù)閱讀 3,211評論 0 2
  • 問題描述 今天遇到一個問題剃允,網(wǎng)頁加載的頁面沛简,服務(wù)器數(shù)據(jù)提交更新了,但是 iOS 這邊顯示的還是老的內(nèi)容斥废。頁面使用的...
    遠方竹葉閱讀 9,883評論 0 12
  • 參考《深入理解瀏覽器的緩存機制》進行整理 前言 緩存可以說是性能優(yōu)化中簡單高效的一種優(yōu)化方式了椒楣。一個優(yōu)秀的緩存策略...
    琢磨先生lf閱讀 739評論 1 1
  • 一、什么是緩存牡肉? 瀏覽器緩存就是瀏覽器保存通過HTTP獲取的所有資源捧灰,是瀏覽器將網(wǎng)絡(luò)資源保存到本地的一種行為。那么...
    Adonia汪閱讀 864評論 0 1
  • bug描述: tab頁票據(jù)類型定義刷新無效 定位分析 其他tab頁簽沒有這個問題, 為jsp老頁面, 出現(xiàn)問題為v...
    Marting424閱讀 776評論 0 0