Реагируйте, оптимизируйте рендеринг для большого объекта массива

#javascript #reactjs #virtual-dom #reconciliation

#язык JavaScript #реагирует на #виртуальный дом #согласие

Вопрос:

У меня есть большой список массива, содержащий около 10 000 списков, и я хочу свести к минимуму отображение объекта в текущем списке.

Есть несколько решений, которые я нашел, таких как react-window или react-virtualized, для визуализации только видимых компонентов, но, похоже, они не подходят для моих текущих потребностей.

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

Я упростил массив объектов в следующем формате с ключом и массивами для быстрой обработки

 var data = {  key: [{},{},{}],  key2: [{},{}],  ...  ...  ..n  }  

Проблема сейчас в том, что реагирование занимает около секунды, чтобы отличить компоненты, и это замедляет работу всего приложения. Если я перейду к профилировщику, я увижу, что реакция занимает около 0,1 мс для компонентов в массиве, это составит 0,1 * 10000 мс, что слишком велико по времени. Я хотел бы запомнить компоненты, чтобы, даже если я добавляю или обновляю объекты внутри объекта, он различал только эти компоненты и не изменял каждый компонент.

 eg. Data manipulation equivalent in js // Suppose only first object's title is changed and updated to state data[key][0].title = 'asd'   

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

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

1. вы должны использовать инструменты профилирования (react devtools, chrome devtools и т.д.), Чтобы точно определить, где происходит замедление. однако одним из решений может быть использование разбиения на страницы.

2. @Дерек Я использовал профилирование devtool, и, похоже, основное время, я думаю, в различиях. Если какой-либо отдельный элемент изменяет разницу во всем массиве, это делает его слишком медленным для рендеринга и отображения изменений.

3. Есть ли шанс поместить этот материал в базу данных, которая может разбивать выходные данные на страницы, а не передавать их вам в одной гигантской полезной нагрузке?

4. @AlexanderNied На самом деле не имеет шансов с тем приложением, которое я создаю. Это что-то вроде электронной таблицы. И каждый ключ представляет данные в строке. Их также можно перетаскивать из одной ячейки в другую. Так что это действительно затрудняет разбиение на страницы