反应系绳内的项目我有一个潜在的长期的反应虚拟化VirtualScroll
呈现的产品清单。
列表中的每个项目(行)都有相当多的元素,其中一个打开上下文菜单。我正在尝试使用react-tether
在HTML body
上呈现该菜单(当项目位于可滚动列表的底部/顶部时,它不会隐藏),并在用户滚动时让菜单“卡住”列表。
我的问题是,更新系绳菜单的位置有明显的滞后。
一些我到目前为止所采取的步骤:
- 渲染一个简单的列表,无需
VirtualScroll
。系绳菜单顺利进行,没有明显的麻烦。这就是我如何得出结论,问题是react-virtualized
- 简化我的
rowRenderer
下降到只有菜单触发器,为recommended here。 - 在行组件中实现了
shouldComponentUpdate
。这极大地提高了感知性能,大大减少了延迟,但仍然引人注目。 - 检查Chrome devtools的时间表。我看到由
Grid.js
和tether.js
触发的回流。
库版本:
- 反应虚拟化v 7.24.3(大项目,没有准备好让一步又8.X)
- 反应系绳v 0.5。 0.2
- 反应诉15.2.1
工作演示
https://plnkr.co/edit/f7OhCoCXkDsWbyjxhR3f
截图:
“_Checked Chrome devtools'时间轴,我看到由Grid.js和tether.js._触发的回流” - 不确定系绳,但在反应 - 虚拟化v8中,我对上游检测进行了2次重要的perf优化-element-resize'库,防止它做大量不必要的回流。如果你使用'AutoSizer',这个改变可能对你有帮助。 (如果你不是,那么它就不是相关的。)如果你可以与我分享一些代码 - 即使它只是一个小Plnkr,我很乐意看看你的问题。 – brianvaughn
@brianvaughn感谢您的快速回复。 1.我不使用'AutoSizer',而是使用我们自己的自定义调整大小处理程序。如果涉及到这一点,我可能会尝试升级到8.x并切换到“AutoSizer” 2.我会看看我是否可以设置一个可共享的例子。可能是一个好主意,无论如何隔离问题 – burtyish
@brianvaughn我用splunkr上的工作演示链接更新了我的问题。延迟是可见的。 – burtyish