J'ai ce que j'imagine être une situation très commune que je pensais être facile à résoudre - une application avec un UICollectionView, avec une image dans chaque cellule qui est extraite d'une API sur un serveur web via http/https.Pré-chargement/prélecture des images de façon optimale dans UICollectionView et UITableView
Je tente d'implémenter iOS 10 prefetching in UICollectionView, de sorte que les images qui sont susceptibles d'être nécessaires sont demandées à l'avance.
Il me semble qu'il ya diverses exigences qui doivent être remplies pour que le préchargement optimal:
- Récupérer les images qui sont effectivement immédiatement nécessaires devrait toujours être une priorité au-dessus de préchargement spéculative, même si l'image est déjà dans une file d'attente à récupérer.
- Lorsque iOS nous dit qu'une image particulière n'a plus besoin d'être préchargée, elle (et seulement elle) doit être supprimée de la file d'attente de prélecture.
- Si une image est demandée, elle doit toujours être fournie à moins que/toutes/les requêtes ne soient annulées (ce qui peut facilement se produire si une image est utilisée dans plusieurs cellules ou plusieurs contrôleurs de vue).
- La récupération priorisée doit être annulée si didEndDisplaying est appelé (mais si la pré-extraction a été demandée et n'a pas été annulée, l'image doit probablement être laissée dans la file d'attente à une priorité inférieure).
- Diverses exigences communes qui se rapportent simplement au chargement de l'image - par ex. Ne pas inonder le système sous-jacent avec des demandes de prélecture qui finiront par prendre la bande passante et les emplacements de serveur loin des images qui sont requises immédiatement.
Je l'ai regardé dans diverses bibliothèques existantes comme SDWebImage et Kingfisher, et a été surpris qu'il ne semble pas être un moyen de répondre aux exigences ci-dessus facilement avec soit la bibliothèque. Par exemple, SDWebImage ne répond pas à la deuxième exigence - vous ne pouvez que cancel all prefetching, ou vous devez créer un pré-extracteur par image (ce qui signifie alors diverses autres fonctionnalités de SDWebImage, comme la limitation du nombre de demandes simultanées de pré- images récupérées - c'est-à-dire l'exigence 5 - ne fonctionne plus.)
Est-ce vraiment un problème? Ai-je manqué une solution évidente? Suis-je en train de repenser les exigences?