У меня есть потенциально длинный список отрисовки элементов в реакции виртуализированных VirtualScroll
.
Каждый элемент (строка) в списке имеет довольно большое количество элементов, один из которых открывает контекстное меню. Я пытаюсь использовать react-tether
, чтобы отобразить это меню на HTML body
(чтобы он не был скрыт, когда элемент находится в нижней части верхней части прокручиваемого списка) и сохраняйте меню «застрял» на моем элементе, пока пользователь прокручивает список.
Моя проблема заключается в том, что наблюдается заметное отставание в обновлении положения привязанного меню.
Некоторые из шагов, которые я взял до сих пор:
- Вынесено простой список, без
VirtualScroll
. Настроенное меню было сделано гладко, без заметного удара. Вот как я пришел к выводу, что проблема связана с - Упрощенный мой
rowRenderer
до только триггера меню, как recommended here. - Выполнено
shouldComponentUpdate
в компоненте строки. Это значительно улучшило воспринимаемую производительность, значительно уменьшило задержку, но это все еще заметно. - Проверенная хронология Chrome devtools. Я вижу пересчеты, вызванные как
Grid.js
, так иtether.js
.
Библиотека Версия:
- реагирует виртуализированный V 7.24.3 (Большой проект, не готово сделать шаг к 8.x еще)
- реагирует-привязанную V 0,5.. 0,2
- реагируют v. 15.2.1
Рабочая Демонстрационный
https://plnkr.co/edit/f7OhCoCXkDsWbyjxhR3f
Скриншот:
«Проверка хронологии Chrome devtools». Я вижу переходы, вызванные как Grid.js, так и tether.js._ »- Не уверен в привязке, но в virtual-virtualized v8 я сделал две важные первоочередные оптимизации для обнаружения вверх -element-resize', что помешало ему сделать много ненужных переплавов. Если вы используете 'AutoSizer', это изменение может вам помочь. (Если вы этого не сделаете, это не будет актуальным.) Я был бы рад взглянуть на вашу проблему, если бы вы могли поделиться со мной кодом, даже если это всего лишь небольшой Plnkr. – brianvaughn
@brianvaughn спасибо за быстрый ответ. 1. Я не использую 'AutoSizer', а наш собственный пользовательский обработчик изменения размера. Если это произойдет, я могу попытаться перейти на 8.x и переключиться на 'AutoSizer' 2. Я посмотрю, могу ли я создать общий вариант. Вероятно, хорошая идея в любом случае изолировать вопрос – burtyish
@brianvaughn Я обновил свой вопрос ссылкой на рабочую демонстрацию на splunkr. Задержка видна. – burtyish