В 2023-м команда React Native наконец-то довела New Architecture до того состояния, когда её можно включать без страха. Три наших проекта поехали на Fabric и TurboModules за этот год. Делимся опытом.
Что новая архитектура реально меняет
- Bridge убран - нативные вызовы синхронные, без сериализации через JSON.
- Fabric (новый renderer) - UI-операции применяются атомарно, без морганий.
- TurboModules - нативные модули загружаются лениво, экономия на старте.
- Hermes по умолчанию - заметно быстрее JSC на cold start.
Что мы измерили
- Cold start - 1.4с против 2.1с у старой архитектуры.
- JS-thread → UI-thread латентность - практически 0 на синхронных вызовах.
- FPS на тяжёлом списке (1000 элементов с медиа) - стабильные 58–60 против 42–48.
- Вес APK - +1.8 МБ (за счёт нового рантайма), пришлось поджать ассеты.
Что сломалось при миграции
На каждом из трёх проектов нашли минимум одну библиотеку, которая не дружит с New Architecture. Обычно это старые wrapper'ы вокруг нативных API - навигация, видеоплееры, какие-то экзотические modal'ы. Чинится либо обновлением, либо переходом на альтернативу.
Когда мигрировать
- Новый проект на 0.73+ - включайте сразу.
- Существующий проект, где есть time на 1–2 спринта на адаптацию - мигрируйте.
- Проект с большим набором кастомных нативных модулей - закладывайте 2–4 недели на портирование.
- Проект на старой версии RN (<0.71) - сначала апгрейд, потом миграция, не одновременно.
Что не изменилось
JavaScript-код приложения практически не требует изменений. Пишем на тех же hooks, тем же стилем. Это главная сила обновления - не ломает прикладной код, меняет только то, что под капотом.