2010-10-04 36 views
5

我们有一个使用BlazeDS的Flex/Java应用程序,我们正在研究减少在我们的服务器和客户端之间传递的有效载荷的大小。AMF是否值得GZip压缩

由于AMF是一种二进制格式,应该相当紧凑,打开GZip压缩有什么好处吗?以前有没有其他人做过这件事,您是否看到使用压缩技术会带来什么重大收益?

UPDATE

我只是进行一个简单的测试,以确定我们可以期待什么样的压缩比的,如果我们要启用gzip压缩。我在一些文件中捕获了AMF有效载荷,并使用Linux命令行版本对它们进行了gzip压缩。我没有指定压缩级别,只是默认值,即'正常'。看起来平均有效载荷大小减少了9%,有些有效载荷增加了61%。任何人都可以在这个方法中看到一个缺陷,并且可以在HTTP gzipping中使用什么级别的压缩?

+0

也许这是一个荒谬的问题 - 你是否利用你的servlet容器(即tomcat)公开的选项来打开压缩?或者您是否使用自定义请求过滤器来执行此操作?我已经看到了代码浮动的问题,这意味着要滚动你自己的过滤器,但我不明白为什么你不能简单地在tomcat连接器上启用压缩。谢谢! – tyler 2011-04-11 15:23:55

回答

5

我们最近将某​​些客户端 - 服务器通信从SOAP切换到了AMF,并且我们还比较了压缩的影响。我们专注于一个特定的服务,它会返回一些大的回应。这些是我们的结果,返回相同的数据(与XFire软件+主持为SOAP,和BlazeDS对于AMF序列):

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

我们的结论是gzipping绝对值得。二进制AMF可以像XML(SOAP)一样被压缩。当然,您的里程可能会有所不同,具体取决于您返回的数据类型。

+0

压缩/解压缩的性能损失大小超过了减少的网络流量? – splash 2010-10-04 09:54:09

+3

@splash:我不认为这取决于大小。对于更大的请求,缺点(更多的CPU时间)和优势(更小的响应)一起扩展。它取决于您的服务器和客户端需要多少CPU和带宽*(这取决于您拥有多少可用空间以及应用程序的CPU和带宽密集程度)。 – 2010-10-04 10:36:55

+0

阅读AMF规范以了解它在哪里工作,哪些不在哪里也是有帮助的。例如,字符串在AMF中根本不被压缩,另一方面,如果你有一堆整数,你将不会看到明显的改进。 – 2010-10-04 16:06:47

4

这取决于数据。如果你有很多高度结构化的数据,那么通常它只使用实际信息的一小部分。然后压缩就会有意义。

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

与非重复字符串类似。

AMF对小整数和重复字符串有一些优化,但没有真正的压缩。见this discusion

做一些基准和决定。

2

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

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