WKWebView缓存的那点事
来源:互联网 发布:湖南道县事件知乎 编辑:程序博客网 时间:2024/05/07 10:34
WKWebView自从推出至今,一直有不断地吐槽伴随,诚然,WKWebView具有很多好处:速度更快、内存更少,但是它也有一些坑
通过这几天的研究,总结一下遇到的关于WKWebView缓存的一些事情
1、二级页面跳转时仍然不可设置缓存策略
用过UIWebView或WKWebView的朋友都知道,在loadRequest方法中的NSURLRequest对象,是可以设置缓存策略的,如
NSURLRequest * urlReuqest = [[NSURLRequest alloc]initWithURL:url cachePolicy:1 timeoutInterval:30.0f]; [_webView loadRequest:urlReuqest];我们通过设置urlRequest的缓存策略为NSURLRequestReloadIgnoringLocalCacheData的操作,指定了接下来的请求必须从服务器端获取,不能加载本地缓存
OK,然后我们执行了一个网页跳转,跳转到了一个新的链接,这时候,我们可以通过代理方法指定是否让UIWebView或WKWebView进行跳转
但是这时候!我们如果打印WebView的request成员变量的cachePolicy属性,会发现它变成了NSURLRequestUseProtocolCachePolicy!也就是变成了系统默认的缓存策略
这样会导致如果有一个静态页面,该静态页面进行了更改,这时候前台已经加载过的设备,除非清除掉全部缓存,否则一直不会加载出新的页面
这个问题如果由APP端进行更改的话,只能用清理全部页面缓存的方法解决,比如后台更新了页面,可以更新一个状态时前台执行清理缓存的方法,这样页面就会重新加载,出现修改后的页面
另一个解决办法是由服务器更改,我截取了一下百度小说访问后的response的header文件,发现这样一个字段
"Accept-Ranges" = bytes; "Cache-Control" = "max-age=0"; Connection = "keep-alive"; "Content-Length" = 114; "Content-Type" = "text/html"; Date = "Wed, 03 Aug 2016 08:00:23 GMT"; Etag = "\"579f13e2-72\""; Expires = "Wed, 03 Aug 2016 08:00:23 GMT"; "Last-Modified" = "Mon, 01 Aug 2016 09:18:26 GMT"; Server = nginx;
百度小说的response的header中,包含了一个Expires字段,该字段和Date,也就是访问页面的时间相同,这样每一次进入小说这个页面的时候,实际上是告诉App端的WebView,缓存已经过期,需要重新加载了,所以每次进入小说页面的时候,都可以实时更新
我们也可以在Nginx服务器设置一个这样的模组,生成一个Expires字段,与访问时间同步,这样就可以略过WebView的缓存了
2.通过JS端增加参数
公司的大牛建议我使用这种办法,而且他不建议在APP端进行修改,所以我们访问了原网页,为跳转的window.href增加了一个时间戳,这样实际上和百度小说的解决办法是一样的,每次进入页面时都不加载缓存并直接访问新页面
- WKWebView缓存的那点事
- 浏览器缓存那点事
- 删除WKWebView的缓存
- 清除WKWebView的缓存
- 删除WKWebView的缓存
- 测试的那点事之node缓存
- 关于浏览器缓存那点事
- WKWebView的两个坑点
- 前端开发中的性能那点事(三)php的opcode缓存
- 前端开发中的性能那点事(三)php的opcode缓存
- 男的那点事
- 质数的那点事
- printk的那点事
- 拓展的那点事
- 装修的那点事
- 邮件的那点事
- 指针的那点事
- 工作的那点事
- android ios 网页爬虫
- java普通类、抽象类和接口的再学习
- WireShark抓包学习
- unity调用摄像头拍照
- 内部类的一些知识
- WKWebView缓存的那点事
- touch事件影响click事件探究
- Html5滑动事件,用于滑动分页
- LoadRunner接口性能测试示例
- 大数据分析技术研究报告(一)
- EBS中描述性弹性域的定义过程
- request和response
- HDU 5795 A Simple Nim (找规律+sg函数+博弈)
- python学习初体验——如何编写和运行程序