VasSonic 2.0 iOS端分析(二)

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

整体结构

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

结构图

主要的类

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

类图

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

  • SonicSessionConfiguration:对会话的配置封装类。
  • SonicCache:本地缓存类。
  • SonicCacheItem:内存缓存模型类。
  • SonicEngine:会话管理类。
  • SonicURLProtocol:WebView请求拦截。
  • SonicProtocol:Sonic协议定义。
  • SonicSession:会话控制类。
  • SonicUtil:工具类。
  • SonicConnection:网络请求类。
  • SonicConfiguration:Sonic的配置封装类。
  • SonicDatabase:数据库操作类。
  • SonicServer:本地服务中间层。
  • SonicConstants:常量定义。

主要流程——首次加载

第一次加载时,本地没有缓存。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,从而更新页面上的模板和数据。

模板更新流程图

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

模板更新时序图

优缺点及适用场景

优点

  • 项目的源码开源。
  • 如果使用恰当确实能增加页面加载速度。
  • 能节省大量流量。

缺点

  • 接入成本高,需要服务端、前端使用统一标准。
  • Local Server虽然简化了服务端配置,但增加了客户端性能消耗。
  • 网页里面嵌入的链接无法缓存。
  • 源码中有不少没有用到的冗余代码。

适用场景

  • 场景一:
    项目刚开始,服务端、前端使用VasSonic统一标准,最适合使用VasSonic SDK。
  • 场景二:
    项目已经进行到中间,或者已经完成,不太适合使用VasSonic SDK,可以使用Local Server模式,但是效果不佳。
  • 场景三:
    在任何情况下,对VasSonic进行改造,使之适用项目。但是后面升级比较麻烦。

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

  • 功能简介
  • 并行加载
  • 数据模板
  • 缓存策略
  • 2.0新特性—Local Server
  • 2.0新特性—Cache-Control

你可能感兴趣的:(VasSonic 2.0 iOS端分析(二))