反應繫繩內的項目我有一個潛在的長期的反應虛擬化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