GWT是否有效地序列化java.lang.Longs?

时间:2010-09-27 21:55:52

标签: serialization gwt performance network-efficiency

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

GWT是否会聪明地将这些值打包在一些可变长度编码中,平均可以节省空间?我可以指定它在某处吗?或者我应该编写自己的代码来将Longs复制到整数并注意那些特殊情况吗?

感谢〜

2 个答案:

答案 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中。