下面分析按照一下内容来进行分析:
| 分析依据 | |:--------------------:|:--------------------:| | (1) 当前版本号 | | (2) 简单介绍、历史跨版本修改主要内容 | | (3) 接口设计的易用性 | | (4) 在网络加载过程中多任务并发实现、任务是否提供取消机制以及提供优先级 | | (5) 获取图片后实现缓存形式 |
(1) 版本号:
5.1.0(2)
SDWebImage一个远古网络开源库,这个库在2009年创建,也是在iOS领域下载比较多的开源库。目前在网络请求采用NSURLSession方式,换言之只支持iOS 7.0不过在官网显示最低版本是iOS 8.0(3)
SDWebImage在接口设计上采用Category的形式通过提供url(图片下载地址),占位图就可以实现下载任务然后设置当前图片。
更多参数:
SDWebImageOptions:可以按照具体实际需求来设置展位图和下载图片处理关系,下载图片优先级设置,下载图片后缓存方式等系列参数,详情可以查看注释
SDWebImageContext:
SDImageLoaderProgressBlock:在图片下载过程中的进度回调block
SDExternalCompletionBlock:图片下载完成后回调block(4)
SDWebImage:多任务并发实现、任务取消机制 和 优先级
多任务并发实现 依据NSOperationQueue来设置maxConcurrentOperationCount来实现,默认下载任务数为:6(可以查看SDWebImageDownloaderConfig)。
任务取消机制 通过继承NSOperation来实现SDWebImageDownloaderOperation重写start、cancel管理cancelled、executing、ready和finished来实现提交下载图片提交任务进行管理。提供了单个任务取消的机制,方法更加灵活。
优先级 通过addDependency来实现同一优先级中实现LIFO和FIFO两种执行,根据queuePriority来设置单个任务的执行优先级顺序(High,Default和Low)。(5) 采用
NSCache和File来实现内存缓存和磁盘缓存,只是做简单的保存处理,没有做额外的操作。
(1) 版本号:
3.0.0-beta.14(2) 是美国
2015开源的一款图片下载库,下面缓存PinCache也是该公司开源的项目。目前在网络请求采用NSURLSession方式,支持最低版本iOS 7.0。(3)
PINRemoteImage在接口设计上同样是采用Category提供url(图片下载地址),占位图在下载获取图片后来直接替换。同时在Server支持的情况下可以实现JPEG图片渐进式加载。JPEG渐进式在线编译工具 支持断点下载。
更多参数:
processorKey:作为在Cache缓存字段组合部分
processor:图片在下载过程中进度回调block
completion:图片下载完成后回调block(4)
PINRemoteImage: 多任务并发实现、任务取消机制 和 优先级
多任务并发实现 通过自定义PINRemoteImageDownloadQueue队列采用Set来保存执行设置maxNumberOfConcurrentDownloads(默认是:10)当任务完成就遍历三个优先级任务队列重新开启新任务下载。
任务取消机制 提供任务取消,但是这个仅仅对于未执行任务。因为保存任务是采用三个具有优先级MutableOrderedSet集合。
优先级 设置三个优先级High、Default和Low三种优先级,只实现一种FIFO实现方式。(5) 在这个开源项目中仅仅采用
NSCache来实现基本Memory缓存,但是我猜测在正式应该使用自己公司封装的PINCache(下文会做讲解)。
小编参考一些博客来实现在
iOS 10版本基础上,可以实现在AMP中对网络请求中DNS,SSL和TCP以及数据请求中花费时间统计。
在实际网络请求中 上行数据 和 下行数据 的流量统计。
基于在
FYHttpURLProtocol只能在 URL Loading System 层面来进行请求处理,在流量统计时不能准确获取在Response中Body一些参数,并且也只有在iOS 10之上才可以使用有一定的局限性。
就采用AOP编码形式来根据NSPorxy和NSURLCollection、NSURLSession和CFNetwork来进行Hook来实现对DNS、SSL和TCP数据请求花费时间和使用流量统计,目前还在完善中ing。
YYCache是YY大神开源的基于:内存缓存、File和Sqlite来实现的数据缓存实现,对其实现过程进行分析,具体可以查看代码注释。不过在使用Sqlite时仅仅是对保存maxCount = 20K来做为File和Sqlite阈值,根据微信在Sqlite对源码的优化和数据库索引设计和优化。在一定的场景下感觉还可以在改进。
PINCache采用在Memory和File数据缓存,提供byteLimit = 50 * 1024 * 1024、ageLimit = 50 * 1024 * 1024磁盘限制。Memory实际实现是采用NSMutableDictionary来实现。提供异步加载方式,采用 信号量 来实现并发操作。具体实现类PINOperationQueue。
是对
Sqlite操作的objc的封装,在此基础上实现事物机制。