UIWebView(3)缓存策略

缓存策略
在创建URLRequest时,我们可以指定缓存策略,系统提供了如下几种:

let request = URLRequest(url: url)
let request1 = URLRequest(url: url, cachePolicy: .reloadRevalidatingCacheData, timeoutInterval: 5)
//缓存策略默认为useProtocolCachePolicy 
//超时default 60.0s
/**
 cachePolicy
 1.useProtocolCachePolicy                
    默认的cache policy,使用Protocol协议定义。
 2.reloadIgnoringLocalCacheData                                       
    忽略缓存直接从原始地址下载。
 3.returnCacheDataDontLoad                               
    只使用cache数据,如果不存在cache,请求失败;用于没有建立网络连接离线模式
 4.returnCacheDataElseLoad                                  
    只有在cache中不存在data时才从原始地址下载。
 5.reloadIgnoringLocalAndRemoteCacheData ! Unimplemented            
    忽略本地和远程的缓存数据,直接从原始地址下载,与NSURLRequestReloadIgnoringCacheData类似。
 6.reloadRevalidatingCacheData     !Unimplemented
    :验证本地数据与远程数据是否相同,如果不同则下载远程数据,否则使用本地数据
 **/

URLCache
ios 提供了一个缓存对象-URLCache,专门负责管理缓存,他是一个全局对象,我们可以在发起请求前对这个全局对象进行设置,进行替换

        let cache = URLCache(memoryCapacity: 1024 * 1024 * 100, diskCapacity: 1024 * 1024 * 100,    
        diskPath: nil)
        URLCache.shared = cache//全局替换
        //局部替换
        //let sessionConfig = URLSessionConfiguration.default
        //sessionConfig.urlCache = cache
        //let session = URLSession(configuration: sessionConfig)

注意别把那个缓存策略和这个缓存对象弄混,一个是策略,方案,一个是管理者,管理者会按照设置的缓存策略来管理缓存。我们可以获取到这个缓存对象,进行清理操作

        let storage = URLCache.shared
        print("内存memoryCapacity", storage.memoryCapacity)//默认52k
        print("磁盘diskCapacity", storage.diskCapacity) //默认10MB
        //单独清理某个请求的缓存
        //storage.removeCachedResponse(for: <#T##URLRequest#>)
        //根据时间清理
        //storage.removeCachedResponses(since: <#T##Date#>)
        //清理所有缓存,即下次请求时,会请求新的全部资源
        storage.removeAllCachedResponses()

当我们使用了缓存时,因为我们设置了缓存大小,URLCache会帮我们自动管理缓存,我们无需关心塔什么时候自动清理,
同时,官方称,
        1、缓存清理会在app非活跃状态进行,不会对app使用造成干扰
        2、它是线程安全的
app的Caches目录下会创建一个和bundleId同名的文件夹,里面就是我们缓存的数据,其中fsCachedData是我们缓存的图片数据

Cookie操作

        let storage = HTTPCookieStorage.shared
        //设置cookie策略,是否接受cookie
        storage.cookieAcceptPolicy = .always
        //某个url的cookie
        //storage.cookies(for: <#T##URL#>)
        //删除
        //storage.deleteCookie(<#T##cookie: HTTPCookie##HTTPCookie#>)
        //删除指定日期cookie
        //storage.removeCookies(since: <#T##Date#>)
        //添加cookie
        //storage.setCookie(<#T##cookie: HTTPCookie##HTTPCookie#>)
        //排序
        //storage.sortedCookies(using: <#T##[NSSortDescriptor]#>)

优化方案

1、尽量使用 GET 请求,iOS 系统 SDK 会自动帮你做缓存。你需要的仅仅是设置下内存缓存大小、磁盘缓存大小、以及缓存路径
2、Web资源离线加载,也可以把整个web页缓存起来,下次请求时根据url或者加载的配置来判断否请求网络,但只实适用固定不变的页面
3、通常webview首次加载非常慢,使用Native网络请求会很快
4、离线包+预加载(静态HTML、静态JS、静态CSS它们的加载、它们离线的东西),首屏进入可直接加载默认数据
5、如果页面样式结构比较固定,则可以采用自己的自己封装的网络请求去获取数据,然后拼接成HTML显示.
6、sokect加载资源

转载于:https://my.oschina.net/dahuilang123/blog/850074

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值