当然,中国当下依然不是有很多流量土豪出现。
一些理论和资料献上(多谢这些大牛的奉献精神):
前提是,要想好只在前端缓存还是前后端一起配合缓存。以上的几篇文章已经非常明了的介绍了缓存的处理。
当然,首先设置 NSURLCache
NSURLCache *urlCache = [[NSURLCache alloc] initWithMemoryCapacity:4 * 1024 * 1024 diskCapacity:20 * 1024 * 1024 diskPath:nil];
[NSURLCache setSharedURLCache:urlCache];
其次,最好是能够配合检测网络状态
我本人觉得RealReachability这个库要比AFNetWorking本身自带的网络状态检测库要更加好用一些。而且配置和使用方法在github上说的也很详细。
最后,分个情况搞一搞
- 只考虑单独的在客户端设置要如何使用。
如果你只想简单的实现离线浏览在线可更新的需求,那这一步基本上已经可以实现了。
- 与服务器搭配。
这种情况常见在第一步已经满足的情况下,还想在进一步优化一下。那么我觉得现在cache-control与etag这两个角色是时候可以闪亮登场了。
可以查阅以下文章了解下:
下图大致说明基本流程:
#######客户端处理与注意如下:
- 修改有网络时:NSURLRequestCachePolicy为NSURLRequestUseProtocolCachePolicy
- 遇到no-cache的response自然不会缓存。
- 保证每次请求都携带ETag
1和2两种情况搭配可以实现如下功能:
- 有网络或者服务器可请求的情况下,可以请求服务器数据,如遇code:304则表示请求的API数据没有发生改变,减少网络传输量,只在数据发生变化的时候才返回数据。
- 无网络或者服务器不可连接的情况,只浏览本地数据打到离线阅读的体验。
有问题的地方,大牛们快来指正(跪求。。。)