私は簡単に解決できると思っていた非常に一般的な状況 - APIからフェッチされた各セルに画像を持つUICollectionViewを持つアプリケーションhttp/httpsを経由してWebサーバーに接続します。UICollectionViewとUITableViewで画像を最適にプリロード/プリフェッチする
私はiOS 10のprefetching in UICollectionViewを実装しようとしています。そのため、必要と思われる画像が事前に要求されています。
最適なプリフェッチのために満たされるべき様々な要件があるように私には思える:イメージが既にある場合でも、実際には、すぐにいつもの投機的プリフェッチの上に優先すべきで必要とされている画像の
- フェッチは、フェッチされるキュー
- 特定のイメージをプリフェッチする必要がなくなったとiOSから通知された場合、プリフェッチキューからそのイメージを削除する必要があります。
- イメージが要求されている場合は、そのイメージの/ all/requestsがキャンセルされない限り、イメージは常に配信されます(1つのイメージが複数のセルまたは複数のビューコントローラで使用されていると、
- didEndDisplayingが呼び出された場合、優先度のあるフェッチを中止する必要があります(ただし、プリフェッチが要求され、取り消されなかった場合、イメージは優先度の低いキューに残っているはずです)。
- 単純に画像の読み込みに関連するさまざまな共通の要件です。基礎となるシステムにプリフェッチ要求をあふれさせないでください。プリフェッチ要求によって、すぐに必要なイメージから帯域幅とサーバースロットが離れてしまいます。
私はSDWebImageとKingfisherのような様々な既存のライブラリを見て、どちらかのライブラリで簡単に上記の要件を満たすためにどのような方法があるように表示されていないことに驚いたしました。
たとえば、cancel all prefetchingしかないSDWebImageは2番目の要件を満たしていないか、画像ごとにプリフェッチャを作成する必要があります(プリフェッチャの同時リクエスト数を制限するなど、さまざまなSDWebImage機能を使用する必要があります)つまり、要件5は機能しなくなりました。)
これは本当に難しい問題ですか?私はいくつかの明白な解決策を見逃しましたか私は要件を熟考していますか?