圖片下載框架概述
圖片下載須要解決(考慮)哪些問題?
內存緩存
- FIFO雙向隊列+LRU雙向隊列+map數據結構。能夠參考LKImageKit。
本地緩存
- 存儲解碼前的。解碼後佔用空間太大;
- 異步IO線程讀取本地圖片數據,sdWebImage解碼是在異步單線程中,當瞬時加載大量圖片時,可能會是性能瓶頸。能夠嘗試在多個線程進行解碼。
合併請求
- 確保一張圖片不會請求屢次
- sdWebImage中,一個下載對應一個operation。屢次重複請求時,添加多個block。
取消請求
- 能夠只刪除對應回調block。下載,解碼,保存內存緩存,保存磁盤緩存照樣繼續進行。(快速滑動列表時,很大機率會再划過來)。
- 取消下載等操做。(一個下載operation,沒有對應回調時直接cancle).
- 提供兩種方案,根據不一樣業務形態進行選擇。
主流圖片格式解碼方案?
- 子線程解碼。SDWebImage使用串行隊列進行解碼。估計是爲了實時下載,解碼,顯示(這種場景下,若是使用併發隊列,順序可能亂掉)這裏應該能夠優化。
- 若是隻是下載結束後解碼,能夠考慮使用異步多線程解碼。
- 解碼格式主要有: Png/jpeg/webP等。 SDWebImage有對應解碼模塊。
- GIF:使用FLAnimatedImage
漸進式加載
- 能夠逐行加載 或 模糊到清晰的加載,
- 參考sdwebImage。我的感受從模糊到清晰的用戶體驗更好。
- 具體實施時,能夠調研下主流APP是否漸進顯示。
極致優化
參考框架
歡迎關注本站公眾號,獲取更多信息