Mam to, co mógłbym sobie wyobrazić, to bardzo częsta sytuacja, której oczekiwałem, że będzie łatwa do rozwiązania - aplikacja z UICollectionView, z obrazem w każdej komórce, która jest pobierana z interfejsu API na serwerze WWW przez http/https.Optymalne wstępne ładowanie/wstępne pobieranie obrazów w UICollectionView i UITableView
Próbuję zaimplementować iOS 10's prefetching in UICollectionView, aby obrazy, które prawdopodobnie będą wymagane, są wymagane z wyprzedzeniem.
Wydaje mi się, że istnieją różne wymagania, które powinny być spełnione w celu uzyskania optymalnej prefetching:
- pobierania obrazów, które są rzeczywiście natychmiast wymagane powinno być zawsze priorytetem powyżej spekulacyjnego prefetching, nawet wtedy, gdy obraz jest już w kolejka do pobrania.
- Gdy iOS mówi nam, że dany obraz nie jest już wymagany do wstępnego wyboru, to (i tylko to) powinien zostać usunięty z kolejki wstępnego pobierania.
- Jeśli obraz jest wymagany, powinien być zawsze dostarczony, chyba że/all/wnioski o to zostaną anulowane (łatwo się pomylić, jeśli jeden obraz jest używany w wielu komórkach lub wielu kontrolerach widoku).
- Priorytetowe pobieranie powinno zostać przerwane, jeśli wywołano wywołanie e-maila (ale jeśli żądanie wstępne było wymagane i nie zostało anulowane, obraz powinien pozostać w kolejce z niższym priorytetem).
- Różne typowe wymagania, które odnoszą się po prostu do ładowania obrazów - np. nie zalewaj bazowego systemu żądaniami preselekcji, które w ostatecznym rozrachunku usuwają przepustowość i gniazda serwerów z obrazów, które są wymagane natychmiast.
szukałem w różnych istniejących bibliotek takich jak SDWebImage i Kingfisher i był zaskoczony, że nie wydaje się być jakiś sposób, aby łatwo spełnić powyższe wymagania zarówno z biblioteki.
Na przykład SDWebImage nie spełnia drugiego wymogu - możesz tylko cancel all prefetching, lub musisz utworzyć pre-fetcher na obraz (co oznacza różne inne funkcje SDWebImage, takie jak ograniczenie liczby równoczesnych żądań pobrane obrazy - tj. wymaganie 5 - już nie działa.)
Czy to naprawdę trudny problem? Czy brakowało mi jakiegoś oczywistego rozwiązania? Czy zastanawiam się nad wymaganiami?