Я создаю приложение React Native (с использованием Redux (Thunk)), где в последнее время я сталкиваюсь с проблемами производительности, для которых мне не удалось найти хорошее решение.
Проблема заключается в том, чтопользовательский интерфейс / приложение зависает / блокируется каждый раз, когда я вызываю действие, независимо от того, изменяется состояние или нет.Приложение работает с данными учетных записей, и проблема возникла, когда количество учетных записей выросло до примерно 3 тыс. Учетных записей.Я проверил следующее:
- Время, необходимое для создания нового состояния в редукторе.
- Для ненужных визуализаций.
- Любые манипуляции с данными, выполняемые в mapStateToProps или где-либо еще.
Ничто из вышеперечисленного не занимает много времени или кажется проблемой.Пример, на котором я тестирую, представляет собой список учетных записей с анимированным всплывающим окном для фильтрации.Когда я добавляю фильтр во всплывающем окне и сохраняю его (обновляет магазин и закрывает всплывающее окно), я вижу, что сразу после всплывающего окна фильтруются учетные записи, но анимация пользовательского интерфейса / всплывающего окна останавливается на 2-3 секунды, прежде чемзакрытие.
Данные хранятся с идентификаторами в качестве индекса для учетных записей и отдельным объектом для фильтров:
{
accountByIds: { acc1: {...}, acc2: {...} },
filters: {...}
}
Мне было интересно, поможет ли использование ImmutableJS, но по мере роста приложениядовольно большой, и я не уверен, что это поможет, так как проблема, похоже, не для многих рендеров и т. д., я не изменил ее.
В настоящее время я обновляю магазин, как показано ниже:
return {
...state,
filters: {
...state.filters,
newFilter
}
}
Подводя итог, кажется, что при обновлении магазина соответствующие рендеры вызываются сразу, но затем приложение на мгновение зависает.
Если кто-то можетпролить свет на это или указать мне правильное направление, я был бы признателен.