Как работает React Native?
Мы могли бы создать множество приложений на платформе React Native. Но что происходит в низкоуровневом коде в собственном проекте?
Давайте сначала узнаем, что именно происходит в низкоуровневом коде.
Потоки в приложении React Native
В приложении React Native есть 4 потока:
- Поток пользовательского интерфейса: также известен как основной поток. Это используется для рендеринга пользовательского интерфейса Android или iOS. Например, в Android этот поток используется для измерения / компоновки / рисования Android.
- Поток JS: поток JS или поток Javascript – это поток, в котором будет выполняться логика. Например, это поток, в котором выполняется код javascript приложения, выполняются вызовы API, обрабатываются события касания и многое другое. Обновления собственных представлений группируются и отправляются на собственную сторону в конце каждого цикла событий в потоке JS (и в конечном итоге выполняются в потоке пользовательского интерфейса). Для поддержания хорошей производительности поток JS должен иметь возможность отправлять пакетные обновления потоку пользовательского интерфейса до крайнего срока рендеринга следующего кадра. Например, iOS отображает 60 кадров в секунду, и это приводит к появлению нового кадра каждые 16,67 мс. Если вы выполните сложную обработку в своем цикле событий javascript, которая приводит к изменениям пользовательского интерфейса и занимает более 16,67 мс, пользовательский интерфейс будет казаться вялым. Единственным исключением являются собственные представления, которые полностью выполняются в потоке пользовательского интерфейса, например, navigatorIOS или scrollview полностью выполняются в потоке пользовательского интерфейса и, следовательно, не блокируются из-за медленного потока js.
- Поток собственных модулей: иногда приложению требуется доступ к API платформы, и это происходит как часть потока собственных модулей.
- Поток рендеринга: только в Android L (5.0) собственный поток рендеринга реакции используется для генерации фактических команд OpenGL, используемых для рисования вашего пользовательского интерфейса.
Процесс, задействованный в работе React Native
- При первом запуске приложения основной поток запускает выполнение и загружает пакеты JS.
- Когда код JavaScript был успешно загружен, основной поток отправляет его в другой поток JS, потому что, когда JS выполняет некоторые сложные вычисления в потоке некоторое время, поток пользовательского интерфейса при этом не пострадает.
- Когда React начинает рендеринг, Reconciler начинает «различать», а когда он генерирует новый виртуальный DOM (макет), он отправляет изменения в другой поток (теневой поток).
- Теневой поток вычисляет макет, а затем отправляет параметры / объекты макета в основной (UI) поток. (Здесь вы можете спросить, почему мы называем это «тенью»? Потому что он генерирует теневые узлы)
- Поскольку только основной поток может отображать что-либо на экране, теневой поток должен отправлять сгенерированный макет в основной поток, и только после этого выполняется визуализация пользовательского интерфейса.
Разделение React Native
Как правило, мы можем разделить React Native на 3 части:
- React Native – Родная сторона
- React Native – сторона JS
- React Native – мост
Это часто называют «3 части React Native».
+1
1
+1
+1
+1
+1