Потоки и отзывчивость в RN
Вопрос
Объясните, на каких потоках выполняется RN-приложение и как это влияет на производительность.
Попробуйте сами
Ответьте вслух за 2 минуты, как на собесе. Потом сверьтесь с тезисами: что прозвучало, а что нет.
Показать ответ и разбор
Коротко
Что должно прозвучать в ответе
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 ошибок.