4

我通过 GWT RPC 机制从客户端到服务器来回发送对象 ID。ID 以 Long(8 字节)的形式从数据存储中出来。我认为我所有的 id 只需要 4 个字节,但可能会发生随机事件,给我一个 5 字节(或其他)的值。

GWT 是否会聪明地将这些值打包成一些可变长度的编码,从而平均节省空间?我可以指定它在某处这样做吗?或者我应该编写自己的代码将 Long 复制到 int 并注意那些异常情况?

谢谢~

4

2 回答 2

4

GWT 对负载为 256 字节或更大的响应使用 gzip 压缩。如果您的响应中有很多零字节,那应该会很好。

来自RemoteServiceServlet.shouldCompressResponse

确定对给定 servlet 请求的响应是否应该进行 GZIP 压缩。只有在请求者接受 GZIP 编码的情况下才会调用此方法。

如果响应字符串的估计字节长度超过 256 个字节,则此实现当前返回 true。子类可以覆盖这个逻辑。

因此,服务器首先检查请求者(通常是浏览器)是否接受 GZIP 编码。在内部,java.util.zip.GZIPOutputStream使用 - 请参阅RPCServerUtils. 在客户端,解压缩 gzip 后的有效负载是浏览器的工作——因为这是在本机代码中完成的,所以应该相当快。

于 2010-09-27T23:01:03.390 回答
4

GWT 文档中所述。

long:JavaScript 没有 64 位整数类型,所以 long 需要特别考虑。在 GWT 1.5 之前,long 类型被简单地映射到 64 位 JavaScript 浮点值的整数范围,从而使 long 变量的实际范围小于完整的 64 位。从 GWT 1.5 开始,长原语被模拟为一对 32 位整数,并在整个 64 位范围内可靠地工作。模拟溢出以匹配预期行为。有几点需要注意。由于底层仿真,大量使用长操作将对性能产生影响。此外,长原语不能在 JSNI 代码中使用,因为它们不是原生 JavaScript 数字类型。

如果您的 id 可以放入整数,那么您可能会更好。否则,如果您使用的是 DTO,请将 id 设置为 double,这实际上存在于 Javascript 中。

于 2010-09-28T11:36:24.993 回答