Http gzip压缩和性能

我一直试图在web服务器上启用gzip压缩,因为它似乎具有非常低的CPU成本,并且您获得了显着的数据传输减less。

现在我有一个没有启用gzip的公共服务器,有时在繁忙stream量下(主要是因为某些页面上的复杂SQL查询),CPU负载相当高,并且阅读这篇关于启用主题的Microsoft文章 ,应该采取CPU负载帐户启用gzip时。

客户端希望减less带宽并加快页面加载时间,但是我不确定启用gzip会带来的好处多less,尽pipe在其他服务器上运行良好。

根据您的经验,gzip压缩会对CPU负载产生重大影响吗?

编辑:在这种情况下,我们正在使用IIS6

关键问题是“多less数据被压缩?”。

如果你正在运行一个大量的数据库查询,运行时间需要很长的时间,而生成的页面长度只有几十Kb,那么压缩数据的开销就会被SQL工作的开销所完全压缩甚至没有考虑到这一点。 与任何块状数据库查询相比,现代CPU将会几乎立即压缩几十或几百Kb。

有利于压缩的另一个因素是,正确configuration的静态页面不会在每个请求中被重新压缩,并且不会受益的对象(图像文件和其他预压缩的对象)根本不会被Web服务器压缩。 只有dynamic的可能被压缩的内容需要在每个请求上进行压缩。

一般来说,除非你有特殊的理由不要压缩 ,否则 我build议你这样做。 除非您在低功耗设备(例如家用路由器)上运行Web服务器,否则CPU成本通常很低。 不压缩的一个原因是脚本使用“长轮询”技术来高效地模拟服务器推送,或脚本将内容滴注到浏览器以进行进度指示 – dynamic压缩所暗示的缓冲可能导致此类请求在客户端上超时一边,但仔细的configuration,你可以将它们添加到“不压缩”列表,同时仍然压缩其他一切。 考虑不使用dynamic压缩的另一个原因是,它会为每个dynamic请求增加一点延迟,但是对于大多数Web应用程序而言,与带宽节省相比,这种差异是完全可以忽略不计的。

关于由SQL查询引起的CPU负载的一个注意事项:这意味着这些查询的工作数据集足够小以适应RAM(否则,您的性能将受到I / O限制,而不是CPU限制),这是一个GoodThing Tm值)。 高CPU负载可能只是由于您怀疑的并发查询的剪切数量,但也可能是它们中的一些是在SQL分配的RAM和/或操作系统的caching中的表扫描对象(否则它们是做长期的工作),所以可能值得logging长时间运行的查询,并检查是否有任何索引改进或其他优化,你可以用来减less他们运行的工作集。

启用GZIP压缩不会显着影响您的CPU负载。 以防万一,你还应该检查你的内存消耗,因为你现在需要在发送之前在内存中缓冲更多的数据(除非GZIP压缩在没有明文缓冲的情况下发生)。 有时候,caching垃圾可能最终导致Web服务器的速度变慢。