我通过GWT RPC机制从客户端到服务器来回发送对象ID。 id作为Longs(8字节)从数据存储区出来。我认为我的所有ID都只需要4个字节,但随机可能会发生,这会给我一个5字节(或其他)值。
GWT是否会聪明地将这些值打包在一些可变长度编码中,平均可以节省空间?我可以指定它在某处吗?或者我应该编写自己的代码来将Longs复制到整数并注意那些特殊情况吗?
感谢〜
答案 0 :(得分:4)
GWT对有效负载为256字节或更大的响应使用gzip压缩。如果你的响应中有很多零字节,这应该可以正常工作。
来自RemoteServiceServlet.shouldCompressResponse
:
确定是否响应 给定的servlet请求应该或应该 不是GZIP压缩。这个方法是 只有在调用的情况下才会调用 请求者接受GZIP编码。
此实施目前返回 如果响应字符串为true,则为true 估计的字节长度比 256个字节。子类可以覆盖 这个逻辑。
因此,服务器首先检查请求者(通常是浏览器)是否接受GZIP编码。在内部使用java.util.zip.GZIPOutputStream
- 请参阅RPCServerUtils
。在客户端,浏览器的作业是decompress the gzipped payload - 因为这是在本机代码中完成的,所以它应该相当快。
答案 1 :(得分:4)
如GWT documentation中所述。
long :JavaScript没有64位整数类型,因此需要特别考虑。在GWT 1.5之前,long类型被简单地映射到64位JavaScript浮点值的整数范围,使长变量的实际范围小于完整的64位。从GWT 1.5开始,长基元被模拟为一对32位整数,并在整个64位范围内可靠地工作。模拟溢出以匹配预期的行为。有几点需要注意。由于潜在的仿真,大量使用长操作会对性能产生影响。此外,长基元不能在JSNI代码中使用,因为它们不是本机JavaScript数字类型。
如果你的id可以适合整数,你可能会更好。否则,如果您正在使用DTO,请将ID设为double,这实际上存在于Javascript中。