0

Google Cloud Endpoints は、GsonFactory または JacksonFactory を使用して JSON 解析を行うことを提案しています。

エンドポイントから数 1000 個の Java オブジェクト (それぞれが long と文字列のフィールドと GeoPt のみを含む) を解析するのに非常に時間がかかり、Galaxy Note 2 で約 15 秒かかることがわかりました。

Googleが提案したように、私は以下を使用します:

myBuilder = new MyDbEndpoint.Builder(
                AndroidHttp.newCompatibleTransport(),
                new GsonFactory(),
                credential);
myEndpoint = myBuilder.build();

...

List<myDb> beings = myEndpoint.myDBEndpoint().someMethod().execute().getItems();

JacksonFactory() でも同じパフォーマンスが得られます。

プロファイリングを行ったところ、すべての時間が JSON の解析に費やされていることがわかりました。

データフェッチを「ページング」する以外に、これを高速化するための方向性を提案できますか?

ありがとう。

4

1 に答える 1

1

実装間で速度の違いが見られなかったことに少し驚きました。Jackson の方が速いはずだと思っていました。

それはさておき、この方法全体が高速であるとは本当に期待していません。C/C++ のバックグラウンドを持つ者として、Google/GAE/Endpoints によるデータ通信の方法は、非常に非効率的であると常に感じていました。つまり、バイナリ データをテキストに変換し、それを構造化テキスト表現に埋め込んでから、そのすべてを解析するのです。反対側のデータ (たとえば、構造体との比較)。

ここで、いくつかのオブジェクトを送受信するだけであれば問題ありませんが、数千のオブジェクトを解析することについて話しているのです。

しかし、Java を使用しているからといって、効率の悪い方法にとらわれているわけではありません。Java も NIO をサポートしており (GAE もその一部をサポートしていると思います)、Google はプロトコル バッファも作成しました。これにより、JSON/XML よりもはるかに効率的でありながら、言語に中立であるというバランスが取れています。 https://developers.google.com/protocol-buffers/docs/overview

そのため、「数千個の Java オブジェクト」の解析がアプリで通常行われる場合は、オブジェクトの別の表現を検討することをお勧めします。

于 2013-09-27T15:41:36.377 に答える