是否使用gzip压缩技术?

17

我一直听说将网站进行gzip压缩可以加快页面的传输速度。我的网站通常有很大的负载,我还需要考虑gzip吗?我也看到了使用gzip的缺点,例如浏览器需要花费时间解压内容才能显示。这是真的吗?


更新:

此问题基于网站已经相当优化的假设。

实际上,我已经对其进行了优化。我的网站上大部分内容都是通过数据库生成的,最初加载所有内容需要一些时间,因此我编写了几个脚本,每晚运行生成内容并将其存储为静态HTML文件,然后在流量最大的页面中引用这些文件。服务器的负载远低于其容量,所以感谢您提供的见解,我现在会更认真地考虑它。我正在考虑使用一些能够动态执行这项任务的PHP类。您有什么推荐吗?


3
请阅读此链接:http://developer.yahoo.com/performance/rules.html#gzip - tawfekov
如果出现问题,您可能还想考虑缓存。 - Andrew Sledge
很有可能您的服务器已经启用了内容压缩。 - Pekka
1
任何现代计算机都可以在很短的时间内解压缩/压缩文件。网络传输占据了加载页面所需时间的大部分(约95%)。结合JavaScript文件和CSS,进行最小化和gzip处理。这意味着较少的文件(HTTP请求)和更小的文件,从而导致更快的页面加载速度。当然,如果您的服务器生成页面速度较慢,则不会有太大的差异。我相信以上提到的雅虎文章中已经涵盖了这些内容。 - Benbob
5个回答

17

压缩响应可以提高传输速度,这意味着它将减少用户下载生成页面所需的时间。通常情况下,这不会减轻服务器的负载(一般而言),实际上它可能会略微增加服务器负荷,因为压缩本身并不是免费的(它会占用一些CPU周期)。

通常情况下,从用户体验的角度看没有任何劣势(仅有优势)。

然而,如果您的服务器已经严重负载,我可能会跳过它,因为它只会增加负载(一般而言)。首先优化代码,然后再添加压缩。不要试图将压缩作为糟糕优化代码的紧急处理措施(它不会奏效)...


9
先优化代码,再添加压缩。- 我不这么认为。优化是一项耗时(=昂贵)的任务,不一定能够得到预期的结果。Gzip是一种简单的措施,只需要花费大约半小时来配置服务器,然后需要一些CPU周期即可实现保证的结果。即使对于高负载的网站,我认为减少带宽成本也完全值得承担任何CPU成本(I/O比CPU慢)。 - gustafc
@gustafc:好的,但需要认识到的是这并不是免费的。现代Linux内核和大多数现代Web服务器提供的异步I/O非常高效(对于长时间传输的CPU成本而言)。当然,添加压缩会带来一些收益,但这取决于您的负载情况是否有所帮助(如果您的CPU受限,则压缩可能会对您产生负面影响。如果您的磁盘或I/O受限,则会有所帮助)。这完全取决于您的CPU大部分时间处于什么状态... - ircmaxell
我建议使用mod_deflate(如果您正在使用Apache)或PHP的内置ZLib输出压缩。它们会进行许多检查以支持浏览器等。如果您可以编辑.htaccess文件或php.ini,则没有必要在PHP中执行此操作... - ircmaxell
我认为重点在于,如果你把压缩作为一种权宜之计,那么你最好在此之后立即开始优化代码(就像敷上绷带后要立刻去医院处理伤口一样)。 - Bryan Downing
关于CPU利用率和压缩,我想补充一点:压缩通常不是一个全有或全无的功能。例如,使用Apache的mod_deflate,如果您认为受到CPU限制,可以将努力级别设置为较低,并且仍然可以对某些文件类型获得相当不错的压缩比。这只是提醒读者们要知道自己的选择。 - PixelCloudSt
显示剩余3条评论

10

你应该对内容进行gzip压缩,因为:

  • 这很容易实现,非常简单
  • 它可以节省你的带宽(从而可能节省你的资金)。
  • 它可以让你的网站运行更快。虽然解压gzip需要一点时间,但由于需要下载的数据更少,所以仍会更快。

你还应该阅读雅虎最佳实践中关于gzip部分的内容。


带价格的翻译:CPU消耗 - mercury

1

我同意@ircmaxell的观点。如果数据库未经过优化或存在愚蠢的查询,则不会对您产生任何魔法。相反,您不会失去任何东西- CPU会承受一些额外的负载,但它可能会严重降低带宽使用率。由于大多数现代浏览器支持GZIP压缩,因此它只是服务器询问客户端是否支持它。更多信息 http://httpd.apache.org/docs/2.0/mod/mod_deflate.html

也许你还应该尝试像@Andrew Sledge建议的一些缓存模块。尝试APC :-) http://www.php.net/manual/en/intro.apc.php。还可以尝试压缩CSS文件,图像或JS文件。我过去使用静态生成整个网站,然后仅更新更改的页面-这肯定取决于更新速率..


技术要点。服务器不会询问客户端是否支持HTTP响应实体压缩。客户端将在每个HTTP请求的“Accept-Encoding”头中指示其支持的编码/压缩方案及其优先顺序,服务器将使用该信息确定是否使用任何编码/压缩方案来对HTTP响应实体进行编码/压缩。 - yfeldblum
@Justice:根据HTTP 1.1规范,如果请求中没有Accept-Encoding字段,则服务器可以假定客户端接受任何内容编码...但是,如果该头部存在,则应予以尊重... - ircmaxell
@ircmaxell,你是正确的,那就是规范。当然,如果我负责编写规范,并且我不关心与HTTP / 1.0的向后兼容性和现有实现的兼容性,我的规则将会不同。但我不是,所以它不是这样的。 - yfeldblum
@Justice:我对你没有异议。我只是指出,如果头部不存在,你在技术上可以自由地做任何你想做的事情。但是,如果存在头部,你应该尊重它(这就是为什么我建议使用内置机制,这样你就不需要担心它了)... - ircmaxell

1

我知道这是一个旧的堆栈问题,但我想尝试用今天的术语/最佳实践回答你的问题。

由于您每晚都在生成静态文件,因此建议您研究zopfli压缩静态文件这里是php lib。特别是因为zopfli压缩比标准gzip多约5%,而且不需要每次执行(在生成静态文件时执行一次并以此方式存储)。然后,当用户要求支持gzip时,您可以提供gzip文件(这样就不需要即时压缩)。对于不支持gzip的用户,您可以在服务器上解压缩它(这样可以减少I / O,因为压缩文件比未压缩版本小,基本上是即时解压缩)。

但是,对于动态内容仍应使用即时压缩(不使用zopfli,因为它具有更高的时间/成本)。

就时间成本而言,使用zopfli压缩静态内容:只要它每天被访问超过100次,它就值得做,因为它需要比标准gzip多大约100倍的处理能力。所以一旦达到101次,您的处理器将正式比即时压缩少处理。


0

解压缩所需时间总是比传输时间节省的一小部分。

  1. GZip压缩
  2. 精简JavaScript、CSS和HTML
  3. 通过文件组合来减少请求

三者结合使用,您可以获得更快的页面加载速度。有关更多详细信息,请参见这里


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