使用AMF进行​​GZip压缩是否值得

时间:2010-10-04 06:42:28

标签: java flex gzip blazeds

我们使用BlazeDS获得了Flex / Java应用程序,我们正在研究减少在服务器和客户端之间传递的有效负载的大小。

由于AMF是一种二进制格式,并且应该相当紧凑,开启GZip压缩有什么好处吗?有没有其他人之前做过这个,你是否看到使用压缩有任何重大收获?

更新

我刚刚执行了一项简单的测试,以确定在启用gzipping时我们可能会遇到什么样的压缩率。我刚刚在一些文件中捕获了AMF有效负载,并使用Linux命令行版本对它们进行了解压缩。我没有指定压缩级别,只是默认值,即“正常”。看起来平均有效载荷大小减少了9%,一些有效载荷增加了61%。任何人都可以看到这种方法的缺陷,以及HTTP gzipping可以使用什么级别的压缩?

3 个答案:

答案 0 :(得分:5)

我们最近将一些客户端 - 服务器通信从SOAP切换到AMF,我们还比较了压缩的影响。我们专注于一个特定的服务,它返回一些重要的回应。这些是我们的结果,返回相同的数据(使用xfire + aegis为SOAP序列化,BlazeDS为AMF序列化):

  • SOAP:未压缩:1000KB gzipped:100KB(减少90%)
  • AMF:未压缩:200KB gzipped:30KB(减少85%)

我们的结论是gzipping绝对值得。二进制AMF的压缩几乎与XML(SOAP)一样好。当然,根据您返回的数据类型,您的里程可能会有所不同。

答案 1 :(得分:4)

这取决于数据。如果您有大量高度结构化的数据,那么通常它只使用实际信息的一小部分。那么压缩就有意义了。

e.g。如果记录为GUID,则具有6种可能性之一的类别字段的记录可能需要32位,但您可以用3位表示它。压缩会将这些模式视为非常频繁并减少它们。

类似于非重复字符串。

AMF对小整数和重复字符串有一些优化,但不是真正的压缩。请参阅this discusion

做一些基准并决定。

答案 2 :(得分:2)

您可以尝试使用我的Census RIA Benchmark打开和关闭GZIP的方式来更改传输大小。但正如其他人指出的那样,结果在很大程度上取决于数据。因此,使用自己的数据进行自己的测试是决定的最佳方式。

还要记住,GZIP的双方都有开销,所以有时候开销是值得的(连接速度较慢),有时则不是。