一、框架&架構
模塊化
分層
解耦
降低代碼重合度
二、圖片緩存框架
怎樣設計一個圖片緩存框架?
2.1 圖片讀寫
圖片通過什么方式進行讀寫,過程怎樣的?
- 以圖片URL的單向Hash值作為Key
讀取流程
2.2 內存設計
內存的設計上需要考慮哪些問題
- 存儲的空間大小Size,根據圖片的大小分為不同的存儲區域,例如:使用頻率高占空間小的會保存的張數多,占內存大的圖片保存的張數少。
- 淘汰策略,第一種隊列先進先出的方式淘汰。第二種LRU算法(最近最久未使用算法),在固定時長內是否使用過,未使用則淘汰。需要注意時間/空間開銷問題。提高檢查觸發頻率檢測。
2.3 磁盤設計
磁盤設計需要考慮哪些問題?
- 存儲方式選擇
- 大小限制
- 淘汰策略
2.4 網絡部分的設計
網絡部分的設計需要考慮哪些問題?
- 圖片請求最大并發量
- 請求超時策略,例如:請求失敗時,重新請求。
- 請求優先級,是否是用戶當前緊急使用的圖片。
2.5 圖片解碼
對于不同格式的圖片,解碼采用什么方式?
- 應用策略模式對不同圖片格式進行解碼
在哪個階段做圖片解碼處理?
磁盤讀取后或者網絡請求后。
小結
本節梳理圖片緩存庫設計的流程和需要考慮的關鍵點。深入學習可以查看SDWebImage
或者YYKit
中關于圖片換存庫的設計。另外找了幾篇緩存庫相關的優秀博文