質問

GWT RPC メカニズムを通じて、クライアントからサーバーにオブジェクト ID を送受信しています。ID はデータストアから Long (8 バイト) として出力されます。すべての ID に必要なのは 4 バイトだけだと思いますが、何かランダムです できた 5 バイト (またはその他) の値が返されることがあります。

GWT は、これらの値を可変長エンコーディングで賢くパックして、平均してスペースを節約するつもりでしょうか?どこかでそうするように指定できますか?それとも、Long を int にコピーして例外的な状況に注意する独自のコードを作成する必要がありますか?

ありがとう〜

役に立ちましたか?

解決

に記載されているように、 GWT ドキュメント.

長さ:JavaScript には 64 ビット整数型がないため、long には特別な考慮が必要です。GWT 1.5 より前は、long 型は 64 ビット JavaScript 浮動小数点値の整数範囲に単純にマップされ、long 変数には完全な 64 ビットよりも小さい実際の範囲が与えられていました。GWT 1.5 では、長いプリミティブは 32 ビット整数のペアとしてエミュレートされ、64 ビット範囲全体で確実に動作します。オーバーフローは、期待される動作に一致するようにエミュレートされます。注意点がいくつかあります。長時間の操作を頻繁に使用すると、基礎となるエミュレーションによりパフォーマンスに影響が生じます。さらに、長いプリミティブはネイティブ JavaScript 数値型ではないため、JSNI コードでは使用できません。

ID が整数に収まる場合は、そのほうがよいでしょう。それ以外の場合、DTO を使用している場合は、ID を Javascript に実際に存在する double にします。

他のヒント

GWT は、ペイロードが 256 バイト以上の応答に gzip 圧縮を使用します。応答にゼロバイトが多く含まれる場合、これはうまく機能するはずです。

から RemoteServiceServlet.shouldCompressResponse:

特定のサーブレットリクエストへの応答がGZIP圧縮されるべきかどうかを判断します。この方法は、要求者がGZIPエンコーディングを受け入れる場合にのみ呼び出されます。

この実装は現在、応答文字列の推定バイト長が256バイトより長い場合にTRUEを返します。サブクラスはこのロジックをオーバーライドできます。

したがって、サーバーはまずリクエスター (通常はブラウザ) が GZIP エンコードを受け入れるかどうかを確認します。内部的に、 java.util.zip.GZIPOutputStream 使用されています - を参照してください RPCServerUtils. 。クライアント側では、ブラウザの仕事です。 gzip 圧縮されたペイロードを解凍します - これはネイティブ コードで実行されるため、かなり高速になるはずです。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top