wiki:api/iOSRequest

session周期定义

从后台恢复回来(距离上一次进入后台时间差高于30秒)、重新启动都算一个新的session周期。

网络请求原则

1.记录一个session内是否有访问过的数据,具体是在程序内保存url访问记录表,一进入新session清空旧表;

2.在一个session周期内发出一个新请求:有缓存数据,先使用缓存数据显示界面(除非有特殊要求),然后请求网络更新数据以及缓存;没缓存数据,显示下拉头或Loading,网络数据回来后更新界面。

3.在一个session周期内发出一个旧请求:有缓存数据,先使用缓存数据显示界面(除非有特殊要求),不发出网络请求。没缓存数据,显示下拉头或Loading,网络数据回来后更新界面。

4.获取网络数据时,,如果数据没更新,只返回响应头304,不刷新页面。

5.Loading的显示策略是主展示内容加载完就应该去掉(如终端页加载完就要去掉,而不是等到评论、收藏等数据都拿到了才去掉)。

6.根据业务来定义请求等级,主界面显示的属于高等级(以资讯首页为例,其中包括首页的资讯列表,焦点图前两张,可见列表内的前面几张导读图),界面辅助显示的属于中等级,列表图片大部分属于低等级。具体可根据业务要求划分。

7.在不同session内,打开应用会主动刷新当前页面数据,当界面返回时,也需要刷新数据。

iOS优先级处理原则:
建立三个请求队列,请求分成高、中、低三种优先级;当有高等级请求时,更高等级的请求必须先做处理。同等级间的请求按队列处理。

1)当高等级请求正在处理时,低等级请求不会进行处理。
2) 当低等级请求已经正在处理,高等级请求进入,不会暂停当前请求。

协议新session是否有缓存是否先返回缓存是否返回网络数据网络异常时处理可应用场景备注
PCHttpClientCachePolicyHttpCache为空第一次打开有缓存必须先返回缓存,再返回新数据,断网不处理
PCHttpClientCachePolicyHttpCache为空第一次打开有缓存必须先返回缓存,再返回新数据,断网不处理
PCHttpClientCachePolicyHttpFirst为空第一次打开有新数据时返回新的,否则返回缓存
PCHttpClientCachePolicyHttpFirst返回缓存第一次打开有新数据时返回新的,否则返回缓存
PCHttpClientCachePolicyCacheFirst为空第二次打开的请求有缓存时返回缓存,当没有缓存时才请求网络
PCHttpClientCachePolicyCacheFirst-第二次打开的请求有缓存时返回缓存,当没有缓存时才请求网络
PCHttpClientCachePolicyNoCache-为空强刷或第二页加载有新数据时才返回
PCHttpClientCachePolicyNoCache-为空强刷或第二页加载有新数据时才返回