一个优秀的图片库需要解决的问题:
- 图片加载速度
- 图片展示效果
- 内存消耗
如何把这三点做透,做到极致是目前业内各大图片库的技术方向。iOS 平台上最受欢迎的莫过于SDWebImage ,有了它,没必要自己再撸一套类似的图片库,要学会站在巨人肩上思考问题 。利用SDWebImage查看一张图片的流程大概如下:
从时序图中,可以得到获取图片的最长路径
- 请求图片-> 查询Cache -> 发起图片请求 -> 解码图片 -> 缓存图片 -> 返回图片
优化点:
- 提高Cache性能
- 优化图片网络
- 优化图片编解码效率。
提高Cache性能
SDWebImage 使用了两层缓存 :
- 内存
- 磁盘
从磁盘加载图片到内存,至少会有一次IO操作,两次Copy 操作。有没有更快的方式?有的,FastImageCache 使用内存映射的方式,把图片加载速度优化到极致!利用内存映射读取图片,至少会有一次IO ,一次Copy 操作。速度比直接从内存读取慢,比磁盘读取快。
三级缓存
- 内存
- 内存映射
- 磁盘
通过三级缓存,提高cache性能。
设计细节
- 请求图片URL可以加上控件(UIImageView.etc)的大小,这样获取到的图片就不需要额外做裁剪,也没有像素对齐的问题。
- 根据业务需要,控制FastImageCache 缓存的图片参数(大小,图片色彩数)。
- 内存Cache 淘汰的图片,存入FastImageCache缓存。
- 根据设备合理设置内存映射空间。
- 根据网络状态加强图片库加载失败重试机制。
优化图片网络
To be continute ...
优化图片编解码效率
To be continute ...