Weex开发技巧weex社区我爱编程

Weex下载Js文件的系统缓存问题

2018-04-13  本文已影响36人  _安迪_

公司项目的项目尝试Weex,发现新部署到服务的js文件没有下载,渲染的还是原有的js文件,应该是WeexSDK中的Request采用了默认的缓存策略了,做了一下修改如下:
一、找到源码WXSDKInstance.m文件下的renderWithURL方法,可以看到request中的cachePolicy默认是NSURLRequestUseProtocolCachePolicy

renderWithURL
二、我们可以点进去看一下,会有如下选择:
typedef NS_ENUM(NSUInteger, NSURLRequestCachePolicy)
{
    NSURLRequestUseProtocolCachePolicy = 0,

    NSURLRequestReloadIgnoringLocalCacheData = 1,
    NSURLRequestReloadIgnoringLocalAndRemoteCacheData = 4, // Unimplemented
    NSURLRequestReloadIgnoringCacheData = NSURLRequestReloadIgnoringLocalCacheData,

    NSURLRequestReturnCacheDataElseLoad = 2,
    NSURLRequestReturnCacheDataDontLoad = 3,

    NSURLRequestReloadRevalidatingCacheData = 5, // Unimplemented
};

苹果提供了7种缓存策略,但是实际能使用的其实就4种,我们就按照字面意思翻译一下来理解
1、NSURLRequestUseProtocolCachePolicy = 0,
NSURL请求使用协议缓存策略,意思是说如果缓存不存在,则从服务器下载,并且会根据http策略自己选择是否缓存,下一次调用的时候根据上一次的http协议缓存策略来决定是用缓存还是重新加载,本人对于http协议研究不深,也就是知道一些缓存方面的参数,例如If-Modified-Since、Cache-Control等。可能也是项目这边的http协议缓存策略制定问题,导致iOS这边如果用这个策略,则会一直加载本地文件。

2、NSURLRequestReloadIgnoringLocalCacheData = 1
NSURL请求重新加载忽略本地缓存数据

3、NSURLRequestReloadIgnoringLocalAndRemoteCacheData = 4 // Unimplemented
苹果暂时没有实现此技术

4、NSURLRequestReloadIgnoringCacheData = NSURLRequestReloadIgnoringLocalCacheData
和NSURLRequestReloadIgnoringLocalCacheData一样,忽略本地缓存,直接发送请求。

5、NSURLRequestReturnCacheDataElseLoad = 2
NSURL请求返回缓存其他数据加载,意思是有缓存就用缓存,没有就加载。

6、NSURLRequestReturnCacheDataDontLoad = 3
NSURL请求返回缓存数据不加载,意思是有缓存就用缓存,没有缓存也不从服务器加载,应该会被当作加载错误处理,这种方式会比较常用在离线模式。

7、NSURLRequestReloadRevalidatingCacheData = 5, // Unimplemented
苹果暂时没有实现此技术

三、由于我这边自己制定了Weex的js文件本地缓存以及更新策略,所以基本只要走到Request这里,则认定都需要从服务器下载,所以我这边根据上面的内容,直接使用NSURLRequestReloadIgnoringLocalCacheData这个策略就可以了。

上一篇下一篇

猜你喜欢

热点阅读