RichFaces ScrollableDataTable コントロールのパフォーマンスを向上するにはどうすればよいですか?
質問
まず、背景を少し説明します。
ScrollableDataTable を使用して 288 行 8 列 (2304 レコード) のデータ セットを表示していますが、パフォーマンスにはまだ改善の余地があります。コントロールを再レンダリングする AJAX リクエストは完了までに 20 秒近くかかりますが、DataTable コントロールを使用して同じデータをレンダリングする場合は 7 秒かかります。
サーブレット フィルターと JavaScript を介して取得されたメトリクスは、事実上すべての処理時間がクライアント側で費やされていることを示しています。19.87 秒のリクエストのうち、3.87 秒がサーバーで費やされます...データのクエリと並べ替えにかかる時間は 0.6 秒未満です。
DataTable コントロールに切り替えると、リクエスト、レスポンス、レンダリングのサイクルが ScrollableDataTable の場合の 1/3 に短縮されますが、いくつかの重要な機能も削除されます。
そして次の質問です。
他に ScrollableDataTable でパフォーマンスの問題を経験した人はいますか?固定列と 2 軸スクロールを使用して JSF/RichFaces で大量の表形式データをレンダリングする最も効率的な方法は何ですか?
アップデート:
結局、カスタム コントロールを作成することになりました。レンダリングされたコンポーネントと生成された JavaScript を完全に制御することで、DataTable に匹敵する応答時間を達成できました。ただし、私は Zack の意見に同意します。ページネーションが正しい答えです。
解決
ボトルネックは、JSF ライフサイクルの「レンダリング応答」フェーズにある可能性が最も高くなります。ビューに対して一度に多すぎるコンポーネントをレンダリングしようとしています。
私の提案は、ページネーションを使用することです。一度にレンダリングされるビューの部分が小さくなるため、パフォーマンスが大幅に向上します。
必ず、 rich:dataTable
持っています rows
プロパティが設定されており、また、列のフィルタリングを行っている場合は、日付テーブルにもプロパティがあることを確認してください。 reRender="paginator"
ページネーターはどこですか rich:datascroller
.
他のヒント
私もずっと前に同様の問題を抱えていたため、ライブスクリプトを使用してページと対話するデータを表示するアプレットを作成することになりました。私のパフォーマンスの問題は、あなたが見ていたものと同じでした。クライアントはテーブル データをレンダリングするのに 30 秒以上かかりましたが、サーバーは 2 秒以内に応答を返しました。
これは、テーブルをレンダリングするために生成された JavaScript のバグのように思えます。別のブラウザでページを試してみましたか?どの JSF 実装を使用していますか (RI または MyFaces など)?