KnockoutJS を使用して仮想化されたリストを作成するために取り組んでいるウィジェットを投稿し、不足している可能性のある最適化を見つけたいと思いました。
画面外の要素を仮想化するためにCSS display:noneを使用して研究を行っていると、さまざまな回答が得られます。そうすることで、ブラウザの「レンダリング」サイクルを回避できると聞いていますが、要素は「dom」更新サイクルで引き続き処理されます。私のテストでは、display:none を設定すると(ノックアウトを可視にバインドすることにより)、アイテムの初期量の追加が確実に高速化されたようです。
最後に、私の仮想化バインディング ハンドラーでは、現在、スクロール位置とウィンドウの高さを取得することで、現在の viewPort を取得しています。これにより、ウィンドウ内インデックス(indexes * rowHeight)をdisplay:blockに設定できます。ただし、その他の非表示のインデックスを非表示にするために、反復処理を繰り返し、それぞれをdisplay:noneに設定します。これは明らかに操作全体を実行するための O(n) ですが、別の方法はありません。これを最適化する方法はありますか?リセットするdisplay:noneをキューにオフロードするほうがよいでしょうか?
http://jsbin.com/axupap/56/edit
どんな洞察も大歓迎です!