一、框架&架构
模块化
分层
解耦
降低代码重合度
二、图片缓存框架
怎样设计一个图片缓存框架?
2.1 图片读写
图片通过什么方式进行读写,过程怎样的?
- 以图片URL的单向Hash值作为Key
2.2 内存设计
内存的设计上需要考虑哪些问题
- 存储的空间大小Size,根据图片的大小分为不同的存储区域,例如:使用频率高占空间小的会保存的张数多,占内存大的图片保存的张数少。
- 淘汰策略,第一种队列先进先出的方式淘汰。第二种LRU算法(最近最久未使用算法),在固定时长内是否使用过,未使用则淘汰。需要注意时间/空间开销问题。提高检查触发频率检测。
2.3 磁盘设计
磁盘设计需要考虑哪些问题?
- 存储方式选择
- 大小限制
- 淘汰策略
2.4 网络部分的设计
网络部分的设计需要考虑哪些问题?
- 图片请求最大并发量
- 请求超时策略,例如:请求失败时,重新请求。
- 请求优先级,是否是用户当前紧急使用的图片。
2.5 图片解码
对于不同格式的图片,解码采用什么方式?
- 应用策略模式对不同图片格式进行解码
在哪个阶段做图片解码处理?
磁盘读取后或者网络请求后。
小结
本节梳理图片缓存库设计的流程和需要考虑的关键点。深入学习可以查看SDWebImage
或者YYKit
中关于图片换存库的设计。另外找了几篇缓存库相关的优秀博文