Как реагирует на реанимированную работу обновления макета? - PullRequest
0 голосов
/ 11 октября 2019

Когда мы используем react-native-reanimated для анимации таких свойств, как translateX, scale или opacity, react-native-reanimated запускает анимацию в «нативном» потоке пользовательского интерфейса. Эти свойства не влияют на механизм компоновки, поэтому мы можем завершить компоновку в основном потоке (JS), передать значения по мосту в поток пользовательского интерфейса и затем анимировать содержимое без участия механизма компоновки.

Однако, когда анимируются такие свойства, как height, padding или margin, это не так ясно. Эти свойства влияют на макет, и нам нужно обновить макет при изменении свойств. Но макет сделан основной темой в Javascript. Если бы механизм компоновки должен был быть активен в каждом кадре, потому что height или padding изменился, это наверняка сильно повлияло бы на производительность.

И действительно, в настоящее время у меня возникают серьезные проблемы с производительностью, когдаанимация padding. Профилировщик говорит мне, что проблемы с производительностью происходят от моста. Похоже, что поток пользовательского интерфейса вызывает Javascript каждый кадр, может быть, чтобы макет обновлялся основным потоком, а затем макет снова передается через мост в native.

Однако react-native-reanimated предлагаетпример widthandheight/index.js, который явно анимирует свойства типа width, height и fontSize, которые влияют на макет. Этот пример работает со скоростью 60 кадров в секунду.

Как react-native-reanimated обрабатывает анимации, которые влияют на макет? Есть ли процесс макета в начале и в конце анимации, а между ними - только поток пользовательского интерфейса (это звучит как экспериментальная функция переходов, но я не говорю о переходах). Есть ли какой-то особый рецепт, которому нужно следовать, чтобы добиться хорошей производительности?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...