С какими проблемами можно столкнуться при получении и обработке большого объема данных с бэка
Что проверяют
Думаете ли вы про память и главный поток, а не только про сеть. Большой ответ бьёт по трём местам сразу: трафик, пик памяти, время разбора. Ждут, что вы знаете, где рвётся первым и чем это меряют.
Как отвечать
Разложите путь данных по этапам и на каждом назовите решение:
- передача. Сервер отдаёт всё разом только потому, что его никто не просил иначе. Курсорная пагинация, запрос изменений с момента последней синхронизации, сжатие ответа;
- разбор.
JSONDecoderна массиве в десятки тысяч объектов работает секунды и делает это там, где его вызвали. Декодирование уходит в фоновую очередь, на главную возвращается готовая модель. Очень большой ответ лучше сложить на диск черезdownloadTaskи разбирать оттуда, не держа весьDataв памяти; - хранение. Массив моделей в памяти заменяется на Core Data или SQLite, запись идёт пачками в фоновом контексте, чтение страницами;
- показ. Список получает данные порциями, изображения приходят ссылками и кэшируются уменьшенными, загрузка отменяется при уходе ячейки с экрана;
- измерение. Instruments и график памяти: смотреть нужно пик, а не среднее.
Где спотыкаются
Декодируют на главном потоке и ищут причину подвисаний в сети. Сеть тут ни при чём, время уходит на разбор и построение объектов.
Второе: не замечают удвоения памяти. Сырые байты, промежуточное представление и массив моделей какое-то время живут одновременно, а система выгружает приложение по пиковому потреблению, не по среднему.
Третье: грузят страницами, но на каждую порцию пересобирают снимок для всего списка целиком. Расчёт различий на десятках тысяч элементов начинает стоить дороже самой загрузки.