Выбор ответа Junior Кеширование обновлено

Размер загружаемых картинок

Вопрос

Лента показывает превью 100×100 точек, а сервер отдаёт оригиналы 4000×3000. Что сделать?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: Запрашивать с CDN картинки нужного размера (с учётом плотности экрана) и уменьшать при декодировании. Оригинал тратит трафик, время загрузки и около 48 МБ памяти в декодированном виде на каждую картинку: view хранит весь декодированный битмап, а не только видимые пиксели.

Варианты ответа

  1. Пережимать оригиналы на устройстве в PNG перед показом, чтобы уменьшить их вес в памяти
  2. Запрашивать с CDN картинки нужного размера (с учётом плотности экрана) и уменьшать при декодированииправильный ответ
  3. Увеличить кеш в памяти, чтобы декодированные оригиналы не приходилось загружать повторно
  4. Показывать оригиналы как есть: UIImageView и ImageView сами хранят в памяти только видимые на экране пиксели

Разбор

Оригинал тратит трафик, время загрузки и около 48 МБ памяти в декодированном виде на каждую картинку: view хранит весь декодированный битмап, а не только видимые пиксели. Правильно: CDN с ресайзом (параметры в URL), подходящий формат (WebP, AVIF, HEIC) и downsampling при декодировании. PNG тяжелее JPEG для фото, а размер декодированного битмапа от формата файла не зависит. Увеличение кеша только приблизит убийство приложения по памяти.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.

Термины по теме