GWT requestfactory を使用すると、パフォーマンスが非常に悪いことがわかります。たとえば、サービス レイヤーがフルフィルになるまでに 2 秒かかるリクエストは、シリアル化に GWT で 20 秒かかります。私のサービスは、EntityProxies となるものを最大 100 個返しています。これらの各オブジェクトには、4 つの ValueProxies とさらに 2 つの EntityProxies (100 のルート レベルの EntityProxies、400 の ValueProxies、および 200 の追加の EntityProxies) になるものがあります。ただし、はるかに小さいデータセットでは、同じ 10 倍のパフォーマンス低下が見られます。
ログ スニペットの例:
D 2012-10-18 22:42:39.546 ServiceLayerDecorator invoke: Inoking service layer took 2265 ms
D 2012-10-18 22:42:58.957 RequestFactoryServlet doPost: Entire request took 22870 ms
メソッドにプロファイリング コードを追加しServiceLayerDecorator#invoke
、サーブレット全体をタイマーでラップしました。私はサービス自体をプロファイリングしましたが、実際には 2 秒以内に結果を返しています。
私は GWT 2.4 を使用していますが、GWT 2.5rc1 と GWT 2.5rc2 でこれをテストしました。私のバックエンドは GAE にありますが、それがここで役割を果たしているとは思いません。
このバグは 2.4 に対して報告されていることがわかりました。これは非常に関連しているようです。この Google グループから手動でパッチを適用しましたが、うまくいきませんでした。
私のドメイン モデルは次のようになります。
class Trip {
protected Address origin; // becomes ValueProxy
protected Address destination; becomes ValueProxy
protected Set<TripPassenger> tripPassengers; // Set of ValueProxies
}
class TripPassenger {
protected Passenger passenger;
}
class Passenger {
protected Account account;
}
私の質問は:
- コードを正しくプロファイリングし、問題を GWT シリアライゼーションに切り分けましたか?
- この動作を引き起こす何か間違ったことをしている可能性はありますか?
- GWT シリアライゼーション コードのプロファイリングを改善して原因を突き止めるにはどうすればよいですか?