一個(gè)優(yōu)秀的圖片庫(kù)需要解決的問題:
- 圖片加載速度
- 圖片展示效果
- 內(nèi)存消耗
如何把這三點(diǎn)做透猪钮,做到極致是目前業(yè)內(nèi)各大圖片庫(kù)的技術(shù)方向搅方。iOS 平臺(tái)上最受歡迎的莫過于SDWebImage ,有了它泵督,沒必要自己再擼一套類似的圖片庫(kù)司草,要學(xué)會(huì)站在巨人肩上思考問題 授段。利用SDWebImage查看一張圖片的流程大概如下:
SDWebImage.png
從時(shí)序圖中没陡,可以得到獲取圖片的最長(zhǎng)路徑
- 請(qǐng)求圖片-> 查詢Cache -> 發(fā)起圖片請(qǐng)求 -> 解碼圖片 -> 緩存圖片 -> 返回圖片
優(yōu)化點(diǎn):
- 提高Cache性能
- 優(yōu)化圖片網(wǎng)絡(luò)
- 優(yōu)化圖片編解碼效率涩哟。
提高Cache性能
SDWebImage 使用了兩層緩存 :
- 內(nèi)存
- 磁盤
從磁盤加載圖片到內(nèi)存,至少會(huì)有一次IO操作诗鸭,兩次Copy 操作染簇。有沒有更快的方式?有的强岸,FastImageCache 使用內(nèi)存映射的方式锻弓,把圖片加載速度優(yōu)化到極致!利用內(nèi)存映射讀取圖片蝌箍,至少會(huì)有一次IO 青灼,一次Copy 操作。速度比直接從內(nèi)存讀取慢妓盲,比磁盤讀取快杂拨。
三級(jí)緩存
- 內(nèi)存
- 內(nèi)存映射
- 磁盤
SDWebImageMeetFastImageCache.png
通過三級(jí)緩存,提高cache性能悯衬。
設(shè)計(jì)細(xì)節(jié)
- 請(qǐng)求圖片URL可以加上控件(UIImageView.etc)的大小弹沽,這樣獲取到的圖片就不需要額外做裁剪,也沒有像素對(duì)齊的問題筋粗。
- 根據(jù)業(yè)務(wù)需要策橘,控制FastImageCache 緩存的圖片參數(shù)(大小,圖片色彩數(shù))娜亿。
- 內(nèi)存Cache 淘汰的圖片丽已,存入FastImageCache緩存。
- 根據(jù)設(shè)備合理設(shè)置內(nèi)存映射空間买决。
- 根據(jù)網(wǎng)絡(luò)狀態(tài)加強(qiáng)圖片庫(kù)加載失敗重試機(jī)制沛婴。
優(yōu)化圖片網(wǎng)絡(luò)
To be continute ...
優(yōu)化圖片編解碼效率
To be continute ...