Выбор ответа Junior Кеширование обновлено
Размер загружаемых картинок
Вопрос
Лента показывает превью 100×100 точек, а сервер отдаёт оригиналы 4000×3000. Что сделать?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: Запрашивать с CDN картинки нужного размера (с учётом плотности экрана) и уменьшать при декодировании. Оригинал тратит трафик, время загрузки и около 48 МБ памяти в декодированном виде на каждую картинку: view хранит весь декодированный битмап, а не только видимые пиксели.
Варианты ответа
- Пережимать оригиналы на устройстве в PNG перед показом, чтобы уменьшить их вес в памяти
- Запрашивать с CDN картинки нужного размера (с учётом плотности экрана) и уменьшать при декодированииправильный ответ
- Увеличить кеш в памяти, чтобы декодированные оригиналы не приходилось загружать повторно
- Показывать оригиналы как есть:
UIImageViewиImageViewсами хранят в памяти только видимые на экране пиксели
Разбор
Оригинал тратит трафик, время загрузки и около 48 МБ памяти в декодированном виде на каждую картинку: view хранит весь декодированный битмап, а не только видимые пиксели. Правильно: CDN с ресайзом (параметры в URL), подходящий формат (WebP, AVIF, HEIC) и downsampling при декодировании. PNG тяжелее JPEG для фото, а размер декодированного битмапа от формата файла не зависит. Увеличение кеша только приблизит убийство приложения по памяти.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.