App --- 图片库

一个优秀的图片库需要解决的问题:

  • 图片加载速度
  • 图片展示效果
  • 内存消耗

如何把这三点做透,做到极致是目前业内各大图片库的技术方向。iOS 平台上最受欢迎的莫过于SDWebImage ,有了它,没必要自己再撸一套类似的图片库,要学会站在巨人肩上思考问题 。利用SDWebImage查看一张图片的流程大概如下:

App --- 图片库_第1张图片
SDWebImage.png

从时序图中,可以得到获取图片的最长路径

  • 请求图片-> 查询Cache -> 发起图片请求 -> 解码图片 -> 缓存图片 -> 返回图片

优化点:

  • 提高Cache性能
  • 优化图片网络
  • 优化图片编解码效率。

提高Cache性能

SDWebImage 使用了两层缓存 :

  • 内存
  • 磁盘

从磁盘加载图片到内存,至少会有一次IO操作,两次Copy 操作。有没有更快的方式?有的,FastImageCache 使用内存映射的方式,把图片加载速度优化到极致!利用内存映射读取图片,至少会有一次IO ,一次Copy 操作。速度比直接从内存读取慢,比磁盘读取快。

三级缓存

  • 内存
  • 内存映射
  • 磁盘
App --- 图片库_第2张图片
SDWebImageMeetFastImageCache.png

通过三级缓存,提高cache性能。

设计细节

  • 请求图片URL可以加上控件(UIImageView.etc)的大小,这样获取到的图片就不需要额外做裁剪,也没有像素对齐的问题。
  • 根据业务需要,控制FastImageCache 缓存的图片参数(大小,图片色彩数)。
  • 内存Cache 淘汰的图片,存入FastImageCache缓存。
  • 根据设备合理设置内存映射空间。
  • 根据网络状态加强图片库加载失败重试机制。

优化图片网络

To be continute ...

优化图片编解码效率

To be continute ...

你可能感兴趣的:(App --- 图片库)