Как стать автором
Обновить

React Native тормозит? Проверь эти 8 узких мест в производительности, прежде чем винить фреймворк [ЧЕК-ЛИСТ]

Время на прочтение14 мин
Количество просмотров3.3K
Всего голосов 35: ↑33 и ↓2+33
Комментарии16

Комментарии 16

Такой подход предотвратит создание новых функций каждый раз и повысит шансы, что потомки не будут обновляться зря.

Стрелочная функция передаваемая аргументом в useCallback как создавалась при каждом рендере так и будет создаваться. Неизменным будет только возвращаемое хуком значение, при условии, что зависимости не изменились.

Поэтому можно использовать mobx и action.bound =)

Это верное наблюдение, но важно различать создание функции и сохранение одной и той же ссылкиuseCallback и нужен именно для последнего — чтобы ссылка оставалась стабильной, пока не изменятся зависимости.

Именно это написано в моем комментарии и не совсем это написанно в цитируемом мной абзаце.

Да, важно различать. Но вы пишете "Такой подход предотвратит создание новых функций". И вам, как раз указывают на ошибку, что такой подход ВООБЩЕ НИКАК не предотвратить создание новых функций.

useCallback(()=>{}, []) - тут создается новая стрелочная функция (аргумент для useCallback), дальше дело техники, относительно, результата, но именно тут ВООБЩЕ НЕТ никакой оптимизации, касающиеся вашего пункта "нагружает сборщик мусора из-за множества краткоживущих объектов-функций". Функции в вашем "подходе", как создавались, так и создаются, в том же количестве и с той же частотой.

Вы и @Galy4a правы.
Фраза про пересоздание функций не корректна, её стоило бы сформулировать как "передает всегда одну и ту же ссылку на функцию, если [deps] не менялся."
В примере useCallback(()=>{}, []) смысла никакого нет, это подсвечено в блоке - Обращайте внимание, когда useMemo и useCallback используются для простых вычислений.

Спасибо за вашу внимательность)

Пример вырожденный и не о "смысле", это лишь для демонстрации, где ошибка в вашей статье. Но если честно, не могу понять, зачем вы пытаетесь как-то сместить фокус вашей явной ошибки в статье на вторичные детали в комментариях.

Вы ведёте себя, как политик... в нехорошем смысле. Это огорчает.

Статья хорошая и полезная. Но есть маленький вопрос, а разве мост bridge не заменили на JSI в 0.72 по умолчанию?

Да, всё так, но к сожалению большие проекты не имеют возможности перейти на новую архитектуру. Из-за отключают JSI при переходе на 0.73 и выше.

Поэтому решил оставить пункт про мост

React Native тормозит?

Отличный, кстати говоря, выбор для главного меню пуск в ОС...

Уже отправил статью МикроМягким :)

Хороший бенчмарк-стресстест. Просто открываешь диспетчер задач и тыкаешь кнопку win...

Ну кст, после того, как RN переехал на jsi он намного больше может, но конечно все сильно зависит от рук и качества зананий))))
Хотя чисто по производительности, для меня flutter все еще в лидерах. (kotlin multiplatform не учитываем)

Осталось параллельность JS завезти в RN эффективную, и была бы вообще сказка.

Вот хороший пример того, как стоит использовать StyleSheet.create

Это как раз плохой пример использования StyleSheet.create, так как стили будут создаваться либо на каждый рендер, либо с useMemo на каждое монтирование каждого элемента. То есть если в списке 500 ячеек, то 500 раз.

В своей статье я писал, как правильно работать со стилями для лучшей производительности.

Отличная статья)
Спасибо что рассказали, записал себе этот пункт в список оптимизации

Зарегистрируйтесь на Хабре, чтобы оставить комментарий