圖片下載框架概述

圖片下載須要解決(考慮)哪些問題?

內存緩存

  • FIFO雙向隊列+LRU雙向隊列+map數據結構。能夠參考LKImageKit。

本地緩存

  • 存儲解碼前的。解碼後佔用空間太大;
  • 異步IO線程讀取本地圖片數據,sdWebImage解碼是在異步單線程中,當瞬時加載大量圖片時,可能會是性能瓶頸。能夠嘗試在多個線程進行解碼。

合併請求

  • 確保一張圖片不會請求屢次
  • sdWebImage中,一個下載對應一個operation。屢次重複請求時,添加多個block。

取消請求

  • 能夠只刪除對應回調block。下載,解碼,保存內存緩存,保存磁盤緩存照樣繼續進行。(快速滑動列表時,很大機率會再划過來)。
  • 取消下載等操做。(一個下載operation,沒有對應回調時直接cancle).
  • 提供兩種方案,根據不一樣業務形態進行選擇。

主流圖片格式解碼方案?

  • 子線程解碼。SDWebImage使用串行隊列進行解碼。估計是爲了實時下載,解碼,顯示(這種場景下,若是使用併發隊列,順序可能亂掉)這裏應該能夠優化。
  • 若是隻是下載結束後解碼,能夠考慮使用異步多線程解碼。
  • 解碼格式主要有: Png/jpeg/webP等。 SDWebImage有對應解碼模塊。
  • GIF:使用FLAnimatedImage

漸進式加載

  • 能夠逐行加載 或 模糊到清晰的加載,
  • 參考sdwebImage。我的感受從模糊到清晰的用戶體驗更好。
  • 具體實施時,能夠調研下主流APP是否漸進顯示。

極致優化

參考框架

相關文章
相關標籤/搜索