通常我们在向后台请求数据的时候不会注意到的一点,URL的缓存策略,其实比我们想象中的全面,我们一直在借鉴SDWebImage框架中对图片的处理、存储、缓存和下载策略,但是,原生的URL中也对此有类似的应对策略!
需求: 我之前遇到的问题: 与HTML5 界面交互,当然需要请求URL,但是,由于请求的数据每次都会有变化,并且webView 自身的缺陷,导致界面的缓存影响了新界面的展示,这个时候,就可以用URL自身的策略来解决相关的问题!!
PS : 缓存的注意事项
缓存的设置需要根据具体的情况考虑,如果请求某个URL的返回数据:
(1)经常更新:不能用缓存! 针对实时变化数据;
(2)一成不变:缓存,节省流量,增加速度!
(3)偶尔更新:可以定期更改缓存策略 或者 清除缓存
提示:如果大量使用缓存,会越积越大,建议定期清除缓存
NSURLRequest
的七种缓存策略(经常使用的:1、2、5、6,至于原因,请看完下面7中作用就知道了!
)
1> NSURLRequestUseProtocolCachePolicy = 0, 默认的缓存策略, 如果缓存不存在,直接从服务端获取。如果缓存存在,会根据response中的Cache-Control字段判断下一步操作,如: Cache-Control字段为must-revalidata, 则询问服务端该数据是否有更新,无更新的话直接返回给用户缓存数据,若已更新,则请求服务端.
2> NSURLRequestReloadIgnoringLocalCacheData = 1, 忽略本地缓存数据,直接请求服务端.
3> NSURLRequestIgnoringLocalAndRemoteCacheData = 4, 忽略本地缓存,代理服务器以及其他中介,直接请求源服务端.
4> NSURLRequestReloadIgnoringCacheData = NSURLRequestReloadIgnoringLocalCacheData
5> NSURLRequestReturnCacheDataElseLoad = 2, 有缓存就使用,不管其有效性(即忽略Cache-Control字段), 无则请求服务端.
6> NSURLRequestReturnCacheDataDontLoad = 3, 死活加载本地缓存. 没有就失败. (确定当前无网络时使用)
7> NSURLRequestReloadRevalidatingCacheData = 5, 缓存数据必须得得到服务端确认有效才使用(貌似是NSURLRequestUseProtocolCachePolicy中的一种情况)
网友评论