2011-01-24 20 views
2

Google Web Toolkit(GWT)を使用してサーバー - クライアントからデータを転送する最良の方法を探しています。送信したいJSONテキストがいくつかありますが、そのために使用した2つのオプションはどちらも非常に遅いです。GWTクライアントサイドのJSON解析が遅い - 改善する方法は?

オプション1:サーバーはJSON文字列を生成し、これをJavaオブジェクト(私が作成したシリアライズ可能クラス)に解析し、クライアント側で使用されるRPCオブジェクトのリストを送信します。ここのブロックはRPC接続です。これは、&のシリアル化オブジェクトを転送するのが非常に遅いです。

オプション2:サーバージェネレータJSON文字列は解析処理を行わず、RPCを文字列としてクライアントに送り、クライアントは次にJavaオブジェクトを解析して処理します。ブロックはクライアントサイドのGWT JSON解析ライブラリです。これは糖蜜としては遅いです(13オブジェクトの場合は約7秒です)。

私が試した唯一の「高速」オプションは、シリアル化されたクラスの各インスタンスによって作成されたフィールドの1つの連結された文字列で、クライアント側で分割されて切り詰められます。しかし、分割されたキャラクタが転送されたコンテンツで使用された場合、これはややこしくて破損しがちです。

多分、私は完全に何か、明らかに間違っています。しかし、の知識GWTのJSON解析時間を改善する方法またはRPC転送時間があります。

乾杯、

ポール

答えて

4

私はJSNIメソッドに包まれたブラウザJSONパーサーを、使用することをお勧めします。従来のブラウザではサポートされていないため、https://github.com/douglascrockford/JSON-jsを使用してそのギャップをカバーすることができます。

提供されているcom.google.gwt.json.client JSONメソッドは、ラッパーオブジェクトを使用しているため、西洋では最速ではありません。自分自身のJSONライブラリ(あまりにも長い間、オープンソースとしてリリースする予定です)を作成しましたが、その間にJSONオブジェクトをネイティブスピードでトラバースするJSNIメソッドを記述することができます。

+0

返信いただきありがとうございます。 JsonUtils.unsafeEvalはネイティブブラウザパーサーを使用していますか?そうでない場合は、必要な方法を知っていますか? – codinghands

+0

_a_ネイティブメソッドを使用します。これはeval()です。しかし、これはJSONパーサと同じくらい安全ではなく、しばしば速くはありません。もう少し詳しくはhttp://www.json.org/js.htmlを参照してください。また、http://stackoverflow.com/questions/945015/alternatives-to-javascript-eval-for-parsing-json –

+0

JSONもご覧ください。 parse()は悪意のあるものを防ぐ安全なメソッドですが、データを提供している場合はeval()を使用できます。詳細については、GWT OverlayTypesのチュートリアルを参照してください。 – LINEMAN78

関連する問題