私が反応し、仮想化VirtualScroll
でレンダリング項目の潜在的に長いリストを持っています。
リストの各項目(行)にはかなりの量の要素があり、そのうちの1つはコンテキストメニューを開きます。私は、のメニューをレンダリングするためにreact-tether
を使用しようとしています(項目がスクロール可能なリストの一番下にあるときに非表示にならないようにします)。そして、ユーザがスクロールしている間、リスト。
私の問題は、つながれたメニューの位置を更新する際に顕著な遅れがあることです。
私がこれまでに撮影したいくつかのステップ
:単純なリストレンダリング- 、
VirtualScroll
なし。テント付きメニューはスムーズにレンダリングされ、顕著なジャンクはありませんでした。それで私は問題がreact-virtualized
- であると結論付けました。私の
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
スクリーンショット:Plnkrが壊れていたことをFYI
"Chrome Devtoolsのタイムラインを確認しました。Grid.jsとtether.js._の両方によってトリガーされたリフローがあります" - テザーについてはわかりませんが、反応仮想化されたv8ではアップストリームの2つの重要な最適化-element-resize'ライブラリを使用して、多くの不要なリフローを防止しました。 'AutoSizer'を使用している場合は、この変更が役に立ちます。 (そうでなければ、それは意味がありません)私はちょうど小さなPlnkrであっても、私といくつかのコードを共有することができれば、あなたの問題を見てうれしいです。 – brianvaughn
@brianvaughnはすばやく返信してくれてありがとう。 1.私は 'AutoSizer'を使用せず、独自のカスタムサイズ変更ハンドラを使用します。その場合、私は8.xにアップグレードし、 'AutoSizer'に切り替えようとするかもしれません。 2.共有可能な例を設定できるかどうか確認します。とにかく問題を分離するための良いアイデアかもしれない – burtyish
@brianvaughn私はsplunkrの作業デモへのリンクで質問を更新しました。遅れが見えます。 – burtyish