Продолжаю серию постов про управление нетворк трафиком. В первом посте мы поговорили про проблему наивной предзагрузки. В этом поговорим про оценку пропускной способности.
Пропускная способность (throughput) — сколько данных система способна обработать за единицу времени.
В мобилке ПС можно найти в таких местах:
🟣Загрузка данных по сети
🟣обработка большого JSON'а
🟣запись в локальную базу
🟣рендеринг большого кол-ва элементов
В больших система многое решается на уровне контента. Уменьшаем размер ответа. Кол-во байтов. Строк. Но есть еще супер базовые советы: Пагинация и lazy loading. Кэширование. Чанканизация.
Но хочется поговорить про необычные и непопулярные решения.
1️⃣ Codable + Chunk Parsing
Проблема: если сразу отдавать огромный массив JSONDecoder.decode(...), то он занимает много памяти и времени. Можно разделять JSON на части и парсить кусками
2️⃣ Сжатие данных (gzip vs Brotli)
Похожее делали в авито и других крупных компаний. Такое сжатие может дать до 65% уменьшения ответа.
3️⃣ Прерасчет лайаута и частичный рендеринг
Проблема: бэк отдает очень большой список компонентов. Мы не хотим рисовать сразу все. А остальные компоненты подготавливать в фоне вместо с отрисовкой.
У таблиц есть UITableViewDataSourcePrefetching еще известный в этой статье. Это помогает подготовить данные до появления ячейки и еще отменить загрузку при быстром скролле.
А у SwiftUI я нашел только какой-то костыль. Если найдете норм решение — кидайте