使用GZip压缩技术对AMF协议是否值得?

5
我们有一个使用BlazeDS的Flex/Java应用程序,正在研究减小服务器和客户端之间传输的负载大小。由于AMF是二进制格式并且应该相当紧凑,是否启用GZip压缩有任何好处?其他人是否曾经这样做过,并且使用压缩是否看到了显著的收益?
更新:我刚刚进行了一项简单的测试,以确定如果我们启用gzip压缩,我们可能会期望什么样的压缩比。我只是在一些文件中捕获了AMF负载,然后使用Linux命令行版本对它们进行了gzip压缩。我没有指定压缩级别,只是默认的即“normal”。平均而言,负载大小减少了9%,有些负载甚至达到了61%。有人能看出这种方法的缺陷吗?HTTP gzip压缩可以使用哪个压缩级别?

也许这是一个可笑的问题 - 你是否利用了servlet容器(例如tomcat)提供的选项来打开压缩?还是使用自定义请求过滤器来实现这一点?我看到有些代码建议自己编写过滤器,但我不明白为什么不能在tomcat连接器上简单地启用压缩。谢谢! - tyler
3个回答

5
我们最近将一些客户端-服务器通信从SOAP切换到AMF,并比较了压缩的影响。我们专注于返回一些大响应的特定服务。以下是我们的结果,返回相同的数据(使用xfire + aegis序列化SOAP和BlazeDS序列化AMF):
SOAP:未压缩1000KB,经过gzip压缩100KB(减少90%) AMF:未压缩200KB,经过gzip压缩30KB(减少85%)
我们的结论是,压缩确实值得尝试。二进制AMF可以被压缩得几乎和XML(SOAP)一样好。当然,根据您返回的数据类型,效果可能会有所不同。

在哪个大小上,压缩/解压缩的性能惩罚超过了减少的网络流量? - splash
3
我认为这并不取决于大小。对于更大的请求,劣势(更多的CPU时间)和优势(较小的响应)相互衡量。这确实取决于您的服务器和客户端有多少CPU和带宽可用(因此取决于您可用的数量以及应用程序有多么消耗CPU和带宽)。 - Wouter Coekaerts
阅读AMF规范将有助于理解它适用的场景和不适用的场景。例如,在AMF中,字符串根本没有被压缩,另一方面,如果您有一堆整数,您将看不到显着的改进。 - Cornel Creanga

4

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

例如,如果一个记录具有类别字段,该字段是6种可能性之一,则如果将其编码为GUID,则可能需要32位,但您可以用3位表示它。压缩将看到这些模式非常频繁,并将其减少。

对于不重复的字符串也是如此。

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

进行一些基准测试并决定。


2
您可以使用我的Census RIA Benchmark,尝试开启和关闭GZIP来观察传输大小的变化。但是正如其他人所指出的那样,结果严重依赖于数据。因此,使用自己的数据进行测试是决策的最佳方式。
此外,请记住,开启GZIP会增加双方的开销,因此有时这种开销是值得的(慢速连接),有时则不是。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接