Ответ вслух Senior Списки и производительность обновлено

Бесконечная лента с обновлением

Вопрос

Спроектируйте ленту новостей: бесконечная подгрузка, pull-to-refresh, новые посты сверху, офлайн-кеш.

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

Ответьте вслух за 2 минуты, как на собесе. Потом сверьтесь с тезисами: что прозвучало, а что нет.

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

Коротко

Образцовый ответ: «Пагинацию делаю курсорной: сервер отдаёт страницу и курсор следующей, поэтому новые посты не сдвигают страницы и не дают дублей. На клиенте useInfiniteQuery: getNextPageParam берёт курсор, onEndReached вызывает fetchNextPage только если есть следующая страница и загрузка не идёт.

Что должно прозвучать в ответе

  • Курсорная пагинация: устойчива к вставкам новых постов

  • `useInfiniteQuery` или своя логика с флагами загрузки и `hasNextPage`

  • Склейка страниц с удалением дублей по id

  • Pull-to-refresh: перезагрузить первую страницу, новые сверху без прыжка позиции

  • Сохранение кеша на диск (персистер) и показ при старте

  • Мемоизированные строки, FlashList, предзагрузка картинок

Что могут спросить следом

  • Как показать плашку «Новые посты» вместо прыжка ленты?
  • Как ограничить память при очень длинной ленте?

Разбор

Образцовый ответ: «Пагинацию делаю курсорной: сервер отдаёт страницу и курсор следующей, поэтому новые посты не сдвигают страницы и не дают дублей. На клиенте useInfiniteQuery: getNextPageParam берёт курсор, onEndReached вызывает fetchNextPage только если есть следующая страница и загрузка не идёт. При склейке страниц на всякий случай убираю дубли по id. Pull-to-refresh перезапрашивает первую страницу; если пользователь глубоко в ленте, не сдвигаю её, а показываю плашку «N новых постов». Кеш сохраняю на диск через персистер на MMKV, чтобы при старте сразу показать последнее. Для прокрутки FlashList с мемоизированными строками и картинками в нужном размере. Если лента очень длинная, ограничиваю число страниц в памяти (maxPages)»

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

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

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