FlexTableを使用してデータを表示する GWT プロジェクトに取り組んでいます。パフォーマンスが優れているため、おそらくCellTableを使用する必要があることはわかっていますが、FlexTable はスタイル設定 (特定のセルのスタイル設定) が容易で、特定のセルの更新が容易になります。
テーブルの更新を受け取るために、WebSocket を使用しています。私たちが現在直面している問題は、WebSocket を介して 1 秒あたり 100 件を超える更新が行われる場合に CPU 負荷が高くなることです。WebSocket 接続からの各メッセージには、テーブル内のいくつかのセルの更新が含まれています。したがって、実際には、FlexTable でレンダリングする必要がある 1 秒あたり 100 を超える更新があります。4GB RAM を搭載した 3GHz i5 の CPU 負荷は約 50% です。データの実際のレンダリングを無効にすると (setText() メソッド呼び出しをコメントアウト)、CPU 負荷は 5 ~ 10% に下がります。したがって、コードの他の部分ではなく、DOM の更新がボトルネックであることはわかっています。
したほうがいいでしょうか
- 代わりにグリッドを使用
- CellTable に切り替えますか (ただし、単一のセルを更新するにはどうすればよいですか)?
- FlexTable setText() の代わりに JS/JSNI を使用して DOM を操作する
テーブルを実装してパフォーマンスを向上させるより良い方法はありますか?
誰かがFlexTableで同様の問題を抱えているかどうかをグーグルで検索しようとしましたが、単に遅いという一般的な意見しか見つかりませんでした。具体的なことは何もありません. アプリケーションのプロトタイプは純粋に JavaScript で作成されており、同じ 1 秒あたり 100 回の更新で、CPU 負荷は約 15% です。
更新
セル値の変化を示すために使用した css フェード効果の削除により、CPU 負荷が最大 10% 減少しました。したがって、問題は DOM だけではないようです。