巨大な DTO を送信するサーバー側サービスがあります。それらをCellTableに入れる必要があります。10 ~ 200 行ほどあるので、すべてを同時に見る必要があります。
サービスの最後の「人為的な」コード行 (リターンの直前) をトレースするサーバー側のログがあります。
最良のシナリオでは、このログと完全に読み込まれたテーブルの間に 2 分のギャップがあります。ほとんどの場合、プロセスの途中で何かが壊れてしまい、私は立ち往生してしまいます。
私のオプションは何ですか?
ありがとう
編集:データダウンロードの長さ(rpcコールバック)とセルテーブルのロードの長さを区別して、アンドレイのアイデアを試しました。
確認したかったので、コールバックで行ったことは次のとおりです。
@Override
public void onSuccess(ResponseBean result) {
Window.alert("success " + new Date().toString());
resultPanel.updateResults(result);
Window.alert("celltable " + new Date().toString());
}
最初のアラートは ~10 秒後に発生します。しかし、2番目のものは決して呼び出されません。
これは updateResults の背後にあるメソッドです:
public void updateResults(ResponseBean response) {
dataProvider.getList().clear();
dataProvider.getList().addAll(response.beans());
myCellTable.setPageSize(response.beans.size());
}
EDIT 2:私は多くのことを試しました。セルテーブルにデータを入力しようとすると、問題が発生します。Chrome では、BSOD の Chrome バージョンが表示されます。Firefox では、黙って中断しますが、残りの js 命令は実行されません。firebug でコンソールを読み取ろうとすると、firefox が ~2.5 GB の RAM を使用してフリーズします。gwt-runner を使用すると、それもフリーズします。
私の例では、4 つの行 (複数の依存関係を持つ 4 つのオブジェクト) しかありません。
WHAT break と WHERE を見つけるにはどうすればよいですか?
助けてくれてありがとう:)
最後に : わかりました。getValues() のどこかに、そこにあってはならない「ビジネス ロジック」があり、それが OutOfMemory エラーを引き起こしていました。
ただし、要点:
- サーバー側の最後の呼び出しとクライアント側の onSuccess の最初の行をトレースして、問題が RPC に関連しているかどうかを確認します。
- セルテーブルが壊れても数行しかない場合は、誇りに思わないことをしました
- Scheduler.get().scheduleDeffered を使用すると、ページをレンダリングしてから、ビジネス ロジックを実行できます。かっこいいですね。
みんなありがとう