Ответ вслух Junior Архитектура и новая архитектура обновлено

Потоки и отзывчивость в RN

Вопрос

Объясните, на каких потоках выполняется RN-приложение и как это влияет на производительность.

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

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

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

Коротко

Образцовый ответ: «Основных потоков два. JS-поток выполняет весь мой код: React, состояние, обработчики, запросы.

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

  • JS-поток для React и логики, UI-поток для нативного интерфейса

  • Блокировка JS: нет реакции на нажатия, JS-анимации стоят

  • Блокировка UI: замирает всё, включая прокрутку

  • Анимации на UI-потоке: native driver, Reanimated worklets

  • Тяжёлое: разбить, отложить, вынести в натив

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

  • Почему анимация с native driver не дёргается при тяжёлом рендере?
  • Как найти, какой поток тормозит?

Разбор

Образцовый ответ: «Основных потоков два. JS-поток выполняет весь мой код: React, состояние, обработчики, запросы. UI-поток платформы отвечает за нативные представления, жесты и отрисовку, плюс раскладка Yoga считается в фоне. Если я заблокирую JS-поток тяжёлым вычислением, нажатия перестанут обрабатываться и анимации, которые обновляются из JS, замрут, но нативная прокрутка ещё будет работать. Если перегружен UI-поток, например огромными изображениями или тяжёлой раскладкой, замирает всё. Поэтому анимации переношу на UI-поток: useNativeDriver в Animated или Reanimated, где кадры считают worklets. А тяжёлую работу дроблю, откладываю или переношу в нативный модуль. Чтобы понять, какой поток виноват, смотрю Perf Monitor и профайлер»

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

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