IOS VasSonic 粗略见解

因为项目需求需要在本地缓存html页面,优化用户体验。了解到VasSonic。百度了下源码解析但是没有发现IOS的所以只有自己慢慢摸索了。

一、类的简单关系

1、 SonicEngine 引擎类 代理为 UIWebViewController
2、SonicSession 代理为 UIWebViewController
3、SonicServer 代理为 SonicSession
4、SonicConnection 代理为 SonicServer (NSURLSession请求数据)
5、SonicURLProtocol              拦截需要的URL做自定义处理

最终返回数据在 SonicSession 中做缓存处理。

缓存数据模板:

《》

二、简单流程

1、在自定义WEB控制器中 启动引擎类 SonicEngine类 通过

- (void)createSessionWithUrl:(NSString *)url withWebDelegate:(id<SonicSessionDelegate>)aWebDelegate方法 创建 SonicSession 类。

2、SonicSession类初始化的同时生成url 的 MD5串SessionID

_sessionID = [sonicSessionID(aUrl)copy]; //SessionID

调用 - (void)setupData 方法 在SonicCache(缓存)中找 sessionID 对应的 URL。首先在 内存中找。如果没有就去本地document中找。

在Document中查找是需要满足 xxx.html、xxx.rsp、xxx.temp 都能对应上 xxx =sessionID,才表示找到缓存。大家可以看到缓存数据模板中有4个文件。比较了前面三个。但是还有一个.data的文件。这个通过名字就能看明白 data...。下面有用到。


下面有两种情况: 找到缓存 和 未找到缓存的情况

找到缓存之后: SonicConnect startLoading 开始。 通过 SonicURLProtocol 协议类 拦截 该动作,直接显示 缓存数据

主要通过 SonicURLProtocol 这个协议来加载缓存数据。

3、具体请求流程

3.1: 根据sessionID取出data

NSData *htmlData = [NSDatadataWithContentsOfFile:[selffilePathWithType:SonicCacheTypeHtmlsessionID:item.sessionID]];

并 从本地数据库中取出 data 的sha1加密值。与 sha1(htmlData)比较是否相等。如果相等 赋值SonicCacheItem。设置 htmlData、config 和 header。

3.2:设置 sonicServer 的 RequestHeader 和 RespondHeader。

3.3: 开始请求:请求流程 SonicSession start --- 设置Coockie ---- SonicConnect startLoading --- NSURLSession 请求。

3.4:回调: SonicConnect didReceiveResponse ---sonicServer didReceiveResponse --SonicSession didReceiveResponse


4、缓存条件

- (BOOL)isValidateSonicResponse:(NSHTTPURLResponse *)response

{

    if ([response.allHeaderFields[SonicHeaderKeyCacheOffline]length] ==0) {

        returnNO;

    }

    if ([response.allHeaderFields[SonicHeaderKeyETag]length] ==0) {

        returnNO;

    }

    if ([response.allHeaderFields[SonicHeaderKeyTemplateChange]length] ==0) {

        returnNO;

    }

    if ([response.allHeaderFields[SonicHeaderKeyTemplate]length] ==0) {

        returnNO;

    }

    returnYES;

}


需要满足 SonicResponse 的结构 才能缓存









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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值