#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 На самом деле не имеет шансов с тем приложением, которое я создаю. Это что-то вроде электронной таблицы. И каждый ключ представляет данные в строке. Их также можно перетаскивать из одной ячейки в другую. Так что это действительно затрудняет разбиение на страницы