iOS网络缓存一般谈

作者: Tywin_Zhang | 来源:发表于2016-03-18 14:06 被阅读832次

    当然,中国当下依然不是有很多流量土豪出现。

    一些理论和资料献上(多谢这些大牛的奉献精神):

    iOS网络缓存扫盲篇--使用两行代码就能完成80%的缓存需求

    IOS缓存机制详解

    iOS http缓存机制

    NSURLCache

    前提是,要想好只在前端缓存还是前后端一起配合缓存。以上的几篇文章已经非常明了的介绍了缓存的处理。

    当然,首先设置 NSURLCache
    NSURLCache *urlCache = [[NSURLCache alloc] initWithMemoryCapacity:4 * 1024 * 1024 diskCapacity:20 * 1024 * 1024 diskPath:nil];
    [NSURLCache setSharedURLCache:urlCache];
    
    其次,最好是能够配合检测网络状态

    我本人觉得RealReachability这个库要比AFNetWorking本身自带的网络状态检测库要更加好用一些。而且配置和使用方法在github上说的也很详细。

    最后,分个情况搞一搞
    1. 只考虑单独的在客户端设置要如何使用。
    请求.png

    如果你只想简单的实现离线浏览在线可更新的需求,那这一步基本上已经可以实现了。

    1. 与服务器搭配。

    这种情况常见在第一步已经满足的情况下,还想在进一步优化一下。那么我觉得现在cache-control与etag这两个角色是时候可以闪亮登场了。

    可以查阅以下文章了解下:

    “Cache-control”常见的取值

    ETag使用效果对比及经验分享(附ETag配置教程)

    下图大致说明基本流程:
    网络请求服务.png

    #######客户端处理与注意如下:

    1. 修改有网络时:NSURLRequestCachePolicy为NSURLRequestUseProtocolCachePolicy
    2. 遇到no-cache的response自然不会缓存。
    3. 保证每次请求都携带ETag

    1和2两种情况搭配可以实现如下功能:
    1. 有网络或者服务器可请求的情况下,可以请求服务器数据,如遇code:304则表示请求的API数据没有发生改变,减少网络传输量,只在数据发生变化的时候才返回数据。
    2. 无网络或者服务器不可连接的情况,只浏览本地数据打到离线阅读的体验。

    有问题的地方,大牛们快来指正(跪求。。。)

    相关文章

      网友评论

      • 来宝:你这个只在无网络的情况下有缓存读取缓存,就是说只要有网就加载数据,还是比较浪费流量,最好加个判断服务端有没有更新后台数据,若没有更新就加载缓存,这样最大限度的节省流量
        Mr卿:@来宝 后面不是说了的么
      • 山晓雨:帮顶
        Tywin_Zhang:@山晓雨 多谢喽😄
      • af80294829ad:完全看不懂:no_mouth:
        Tywin_Zhang:@极速时光 啊哈哈^ω^

      本文标题:iOS网络缓存一般谈

      本文链接:https://www.haomeiwen.com/subject/owzclttx.html