iOS精选程序员

VasSonic 2.0 iOS端分析(二)

2018-03-14  本文已影响0人  frog78

接上篇《VasSonic 2.0 iOS端分析(一)》,继续介绍VasSonic。

整体结构

以功能模块为单位看VasSonic,主要分为以下几个部分:

结构图

主要的类

VasSonic 2.0主要的类如下面类图所示:

类图

在类图中可以很清楚地看出各类之间的关系,下面简单介绍一下各个类的主要作用。

主要流程——首次加载

第一次加载时,本地没有缓存。SonicClient(2.0中已经改为SonicEngine)会首先发起一次请求,拿到需要加载网页的数据,并且将数据拆分为模板和数据两个部分,以及从相应头中获取到配置信息。将这三类信息作为三个文件缓存到本地数据库。当WebView加载url发起请求时,NSURLProtocol会进行拦截,直接拿到SonicClient已经请求到的数据,并刷新到网页上。

首次加载流程图

大概的时序图如下图所示:

首次加载时序图

主要流程——完全缓存

完全缓存是非首次加载的情况。SonicClient(2.0中已经改为SonicEngine)还是会首先发起一次请求,但是本次请求返回的响应码为304,也就是服务端的数据无变化。此时,SonicClient只会更新响应头中的配置信息,如请求时间等等。当WebView加载url发起请求时,NSURLProtocol也会进行拦截,直接加载本地缓存的数据。

完全缓存流程图

大概的时序图如下图所示:

完全缓存时序图

主要流程——数据刷新

数据刷新也是非首次加载的情况。SonicClient(2.0中已经改为SonicEngine)还是会首先发起一次请求,但是本次请求返回的响应码为200,也就是服务端的数据有变化。那么,数据有哪些变化呢?请求的响应头会用字段TemplateChange来告诉客户端(该部分在上一篇缓存策略中讲到过)。如果TemplateChange的值为false,那么说明模板没有变化,所以数据部分一定会有变化。此时,SonicClient不仅会更新响应头中的配置信息,也会更新本地的数据文件。当WebView加载url发起请求时,NSURLProtocol也会进行拦截,先加载本地缓存的数据,然后将更新的数据回调给页面进行刷新。

数据刷新流程图

大概的时序图如下图所示:

数据刷新时序图

主要流程——模板更新

模板更新也是非首次加载的情况。SonicClient(2.0中已经改为SonicEngine)还是会首先发起一次请求,但是本次请求返回的响应码为200,也就是服务端的数据有变化。请求的响应头中TemplateChange字段的值为true,说明模板发生了改变。此时,SonicClient不仅会更新响应头中的配置信息,也会更新本地的模板文件和数据文件。当WebView加载url发起请求时,NSURLProtocol也会进行拦截,先加载本地缓存的数据,然后触发WebView重新load url,从而更新页面上的模板和数据。

模板更新流程图

大概的时序图如下图所示:

模板更新时序图

优缺点及适用场景

优点

缺点

适用场景


上篇《VasSonic 2.0 iOS端分析(一)》
见:https://www.jianshu.com/p/def800b91cb0
主要内容:


上一篇 下一篇

猜你喜欢

热点阅读