私はFlexTableを使ってGWTプロジェクトに取り組んでいます。私はおそらくCellTableを使用するべきであることを知っていますが、より良いパフォーマンスが得られるはずですが、FlexTableはスタイルが簡単で(特定のスタイルのセル)、特定のセルを簡単に更新できます。GWT FlexTableのパフォーマンスと最適化
WebSocketを使用しているテーブルの更新を受信する。私たちが今直面している問題は、毎秒100を超えるアップデートがWebSocketを経由している場合にCPU負荷が高くなることです。 WebSocket接続の各メッセージには、テーブル内の複数のセルの更新が含まれています。したがって、実際にはFlexTableでレンダリングされるべき毎秒100以上の更新があります。 4GBのRAMを搭載した3GHz i5のCPU負荷は約50%です。データの実際のレンダリングを無効にすると(setText()メソッド呼び出しをコメントアウトすると)、CPU負荷は5〜10%に低下します。だから私は、DOMの更新がボトルネックであり、コードの他の部分ではないことを知っています。
は、それが代わりに
- 使用グリッド方が良いでしょうか?
- DOMの代わりに、FlexTableのsetText(で動作するように使用JS/JSNI)
は、テーブルを実装し、パフォーマンスを向上させるためにそこより良い方法はありますか?
誰かがFlexTableで同様の問題を抱えていたとしても、私はそれを試してみましたが、それは単に遅いだけで一般的な意見ではありません。私たちは、JavaScriptで第二のCPU負荷ごとに同じ100のアップデートで純粋に行われたアプリケーションのプロトタイプは15%程度
更新
たちは〜10でセルの値に減少CPU負荷の変化を示すために使用されるCSSのフェード効果を削除されてい%。したがって、DOMだけが問題ではないようです。
セルの実際の更新はSchedulerImpl.get()。scheduleDeferred()内で実行されますが、それはあまり役に立ちません。それはブラウザをより応答性に保ちますが。 SchedulerImpl.get()を使用すると、取得するデータの量が異なるため、scheduleIncremental()が機能しません。今のところ、Gridを試したり、テーブルを実装したりするべきだと思っています。 – dimchez
このケースでは、インクリメンタルは遅延されたものよりはるかに優れています。 Deferredは操作ごとに新しいjsタイマーを使用しますが、インクリメンタルは複数の更新を1つのjs実行スタックにバッチして1ページの再描画を行い、レンダリングスレッドも操作をバッチで行うことができます。 – Ajax