
一、框架&架構(gòu)
模塊化
分層
解耦
降低代碼重合度
二、圖片緩存框架
怎樣設(shè)計(jì)一個(gè)圖片緩存框架?

2.1 圖片讀寫
圖片通過(guò)什么方式進(jìn)行讀寫,過(guò)程怎樣的?
- 以圖片URL的單向Hash值作為Key

讀取流程
2.2 內(nèi)存設(shè)計(jì)
內(nèi)存的設(shè)計(jì)上需要考慮哪些問(wèn)題
- 存儲(chǔ)的空間大小Size,根據(jù)圖片的大小分為不同的存儲(chǔ)區(qū)域,例如:使用頻率高占空間小的會(huì)保存的張數(shù)多,占內(nèi)存大的圖片保存的張數(shù)少。
- 淘汰策略,第一種隊(duì)列先進(jìn)先出的方式淘汰。第二種LRU算法(最近最久未使用算法),在固定時(shí)長(zhǎng)內(nèi)是否使用過(guò),未使用則淘汰。需要注意時(shí)間/空間開(kāi)銷問(wèn)題。提高檢查觸發(fā)頻率檢測(cè)。
2.3 磁盤設(shè)計(jì)
磁盤設(shè)計(jì)需要考慮哪些問(wèn)題?
- 存儲(chǔ)方式選擇
- 大小限制
- 淘汰策略
2.4 網(wǎng)絡(luò)部分的設(shè)計(jì)
網(wǎng)絡(luò)部分的設(shè)計(jì)需要考慮哪些問(wèn)題?
- 圖片請(qǐng)求最大并發(fā)量
- 請(qǐng)求超時(shí)策略,例如:請(qǐng)求失敗時(shí),重新請(qǐng)求。
- 請(qǐng)求優(yōu)先級(jí),是否是用戶當(dāng)前緊急使用的圖片。
2.5 圖片解碼
對(duì)于不同格式的圖片,解碼采用什么方式?
- 應(yīng)用策略模式對(duì)不同圖片格式進(jìn)行解碼
在哪個(gè)階段做圖片解碼處理?
磁盤讀取后或者網(wǎng)絡(luò)請(qǐng)求后。
小結(jié)
本節(jié)梳理圖片緩存庫(kù)設(shè)計(jì)的流程和需要考慮的關(guān)鍵點(diǎn)。深入學(xué)習(xí)可以查看SDWebImage或者YYKit中關(guān)于圖片換存庫(kù)的設(shè)計(jì)。另外找了幾篇緩存庫(kù)相關(guān)的優(yōu)秀博文