WKWebView默認緩存的使用

WKWebView加載網(wǎng)頁時為了追求更好的用戶體驗狐血,會設計一個緩存機制來應對加載緩慢的問題啥酱。
緩存的方案一般有2種:
1.利用瀏覽器自帶的緩存機制区转。優(yōu)點(緩存機制由系統(tǒng)提供方便快捷)弧满,缺點(系統(tǒng)將內容存在cache中咬扇,在遇到內存緊張的時候會自動清理一次)
2.將網(wǎng)頁內容以壓縮包的形式下載到Document下面,解壓后進行加載鸡挠。優(yōu)點(Document下的資源不會被無故清除)辉饱,缺點(需要自行設計一整套更新替換方案,iOS9以下的需要把內容copy到temp目錄才能讀燃鹫埂)
這里就第1種利用系統(tǒng)的緩存方案進行了嘗試彭沼。

系統(tǒng)的請求方法

let url = URL.init(string: "http://localhost/htmlMoudle/index")!
let request = URLRequest.init(url: url, cachePolicy: .reloadRevalidatingCacheData, timeoutInterval: 15.0)
self.webView?.load(request)

這其中的cachePolicay是一個枚舉,具體的含義如下

case useProtocolCachePolicy//默認方式
case reloadIgnoringLocalCacheData//不使用緩存
case reloadIgnoringLocalAndRemoteCacheData//決不使用任何緩存
case returnCacheDataElseLoad//使用緩存(不管它是否過期)备埃,如果緩存中沒有姓惑,那從網(wǎng)絡加載吧
case returnCacheDataDontLoad//離線模式:使用緩存(不管它是否過期)译株,但是不從網(wǎng)絡加載
case reloadRevalidatingCacheData//驗證本地數(shù)據(jù)與遠程數(shù)據(jù)是否相同,如果不同則下載遠程數(shù)據(jù)挺益,否則使用本地數(shù)據(jù)

根據(jù)枚舉的描述歉糜,普遍的需求貌似只需要最后那種方式reloadRevalidatingCacheData來進行請求就能達到正常的更新和緩存使用的要求了。

reloadRevalidatingCacheData緩存策略的驗證

一望众、準備工作

1.(Mac電腦)將準備好的工程放到:/資源庫/WebServer/Documents下匪补,如圖所示

屏幕快照 2018-09-29 11.26.32.png

2.打開終端,開啟mac電腦的apache服務器:
開啟apache: sudo apachectl start
重啟apache: sudo apachectl restart
關閉apache: sudo apachectl stop

二烂翰、修改前的運行結果
修改前的截圖.png
三夯缺、修改后的運行結果
修改后的截圖.png

測試說明reloadRevalidatingCacheData確實是有效的,有個問題就是如果在這個網(wǎng)頁之內請求的其它的網(wǎng)頁甘耿,這個新點開的網(wǎng)頁的緩存策略就會換成了默認的緩存策略了踊兜。

清除緩存

系統(tǒng)會在cache內存警告的時候自行清理緩存一次,手動清除緩存代碼如下(根據(jù)具體情況使用)

/**支持iOS9.0以上的清理方法*/
/**dataTypes傳一個集合佳恬,可以指定只刪除內存或是Disk或是cookie的內容等*/
let dataTypes = WKWebsiteDataStore.allWebsiteDataTypes()
let date = Date.init(timeIntervalSince1970: 0)
WKWebsiteDataStore.default().removeData(ofTypes: dataTypes, modifiedSince: date) {}
/**支持iOS8.0以上的清理方法*/
let cachePath = NSHomeDirectory() + "/Library/Caches"
let bundleId : String = Bundle.main.infoDictionary!["CFBundleIdentifier"] as! String
let webKitCachePath = cachePath+"/"+bundleId+"/WebKit"
try!FileManager.default.removeItem(atPath: webKitCachePath)
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末捏境,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子毁葱,更是在濱河造成了極大的恐慌垫言,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,183評論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件倾剿,死亡現(xiàn)場離奇詭異筷频,居然都是意外死亡,警方通過查閱死者的電腦和手機前痘,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,850評論 3 399
  • 文/潘曉璐 我一進店門凛捏,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人芹缔,你說我怎么就攤上這事坯癣。” “怎么了乖菱?”我有些...
    開封第一講書人閱讀 168,766評論 0 361
  • 文/不壞的土叔 我叫張陵坡锡,是天一觀的道長。 經(jīng)常有香客問我窒所,道長,這世上最難降的妖魔是什么帆锋? 我笑而不...
    開封第一講書人閱讀 59,854評論 1 299
  • 正文 為了忘掉前任吵取,我火速辦了婚禮,結果婚禮上锯厢,老公的妹妹穿的比我還像新娘皮官。我一直安慰自己脯倒,他們只是感情好,可當我...
    茶點故事閱讀 68,871評論 6 398
  • 文/花漫 我一把揭開白布捺氢。 她就那樣靜靜地躺著藻丢,像睡著了一般。 火紅的嫁衣襯著肌膚如雪摄乒。 梳的紋絲不亂的頭發(fā)上悠反,一...
    開封第一講書人閱讀 52,457評論 1 311
  • 那天,我揣著相機與錄音馍佑,去河邊找鬼斋否。 笑死,一個胖子當著我的面吹牛拭荤,可吹牛的內容都是我干的茵臭。 我是一名探鬼主播,決...
    沈念sama閱讀 40,999評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼舅世,長吁一口氣:“原來是場噩夢啊……” “哼旦委!你這毒婦竟也來了?” 一聲冷哼從身側響起雏亚,我...
    開封第一講書人閱讀 39,914評論 0 277
  • 序言:老撾萬榮一對情侶失蹤社证,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后评凝,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體追葡,經(jīng)...
    沈念sama閱讀 46,465評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 38,543評論 3 342
  • 正文 我和宋清朗相戀三年奕短,在試婚紗的時候發(fā)現(xiàn)自己被綠了宜肉。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,675評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡翎碑,死狀恐怖谬返,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情日杈,我是刑警寧澤遣铝,帶...
    沈念sama閱讀 36,354評論 5 351
  • 正文 年R本政府宣布,位于F島的核電站莉擒,受9級特大地震影響酿炸,放射性物質發(fā)生泄漏。R本人自食惡果不足惜涨冀,卻給世界環(huán)境...
    茶點故事閱讀 42,029評論 3 335
  • 文/蒙蒙 一填硕、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦扁眯、人聲如沸壮莹。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,514評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽命满。三九已至,卻和暖如春绣版,著一層夾襖步出監(jiān)牢的瞬間胶台,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,616評論 1 274
  • 我被黑心中介騙來泰國打工僵娃, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留概作,地道東北人。 一個月前我還...
    沈念sama閱讀 49,091評論 3 378
  • 正文 我出身青樓默怨,卻偏偏與公主長得像讯榕,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子匙睹,可洞房花燭夜當晚...
    茶點故事閱讀 45,685評論 2 360

推薦閱讀更多精彩內容