圖片下載框架概述

hejunm發表於2019-01-11

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

記憶體快取

  • FIFO雙向佇列+LRU雙向佇列+map資料結構。可以參考LKImageKit。

本地快取

  • 儲存解碼前的。解碼後佔用空間太大;
  • 非同步IO執行緒讀取本地圖片資料,sdWebImage解碼是在非同步單執行緒中,當瞬時載入大量圖片時,可能會是效能瓶頸。可以嘗試在多個執行緒進行解碼。

合併請求

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

取消請求

  • 可以只刪除對應回撥block。下載,解碼,儲存記憶體快取,儲存磁碟快取照樣繼續進行。(快速滑動列表時,很大概率會再划過來)。
  • 取消下載等操作。(一個下載operation,沒有對應回撥時直接cancle).
  • 提供兩種方案,根據不同業務形態進行選擇。

主流圖片格式解碼方案?

  • 子執行緒解碼。SDWebImage使用序列佇列進行解碼。估計是為了實時下載,解碼,顯示(這種場景下,如果使用併發佇列,順序可能亂掉)這裡應該可以優化。
  • 如果只是下載結束後解碼,可以考慮使用非同步多執行緒解碼。
  • 解碼格式主要有: Png/jpeg/webP等。 SDWebImage有對應解碼模組。
  • GIF:使用FLAnimatedImage

漸進式載入

  • 可以逐行載入 或 模糊到清晰的載入,
  • 參考sdwebImage。個人感覺從模糊到清晰的使用者體驗更好。
  • 具體實施時,可以調研下主流APP是否漸進顯示。

極致優化

參考框架

相關文章