WKWebView默认缓存的使用

WKWebView加载网页时为了追求更好的用户体验,会设计一个缓存机制来应对加载缓慢的问题。
缓存的方案一般有2种:
1.利用浏览器自带的缓存机制。优点(缓存机制由系统提供方便快捷),缺点(系统将内容存在cache中,在遇到内存紧张的时候会自动清理一次)
2.将网页内容以压缩包的形式下载到Document下面,解压后进行加载。优点(Document下的资源不会被无故清除),缺点(需要自行设计一整套更新替换方案,iOS9以下的需要把内容copy到temp目录才能读取)
这里就第1种利用系统的缓存方案进行了尝试。

系统的请求方法

 

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//使用缓存(不管它是否过期),如果缓存中没有,那从网络加载吧
case returnCacheDataDontLoad//离线模式:使用缓存(不管它是否过期),但是不从网络加载
case reloadRevalidatingCacheData//验证本地数据与远程数据是否相同,如果不同则下载远程数据,否则使用本地数据

根据枚举的描述,普遍的需求貌似只需要最后那种方式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确实是有效的,有个问题就是如果在这个网页之内请求的其它的网页,这个新点开的网页的缓存策略就会换成了默认的缓存策略了。

清除缓存

系统会在cache内存警告的时候自行清理缓存一次,手动清除缓存代码如下(根据具体情况使用)

 

/**支持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)

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值