6

我在Apache 2.2上使用mod_deflate ,压缩级别设置为 9。我根据YSlow (v2)的建议对网站的每个可能方面进行了微调,并设法获得了总体 A 级(总分: 91) 以及所有类别,除了:

  • 减少 HTTP 请求(C 级- 我仍在进一步统一图像)
  • 使用 gzip 压缩组件(F 级

YSlow 仍然返回 F 并告诉我在我的 CSS 和 JS 文件上使用 gzip。这是 YSlow 报告的屏幕截图(为了保护隐私,域已被模糊)YSlow 报告截图

然而,像GIDNetwork GZIP Test这样的网站报告完美的压缩!

我的 .htaccess 的 mod_deflate 部分

# Below uses mod_deflate to compress text files. Never compress binary files.
<IfModule mod_deflate.c>
SetOutputFilter DEFLATE

# compress content with type html, text, js, and css
AddOutputFilterByType DEFLATE text/html text/plain text/css text/javascript text/xml image/svg+xml application/javascript application/x-javascript application/atom_xml application/rss+xml application/xml application/xhtml+xml application/x-httpd-php application/x-httpd-fastphp

# Properly handle old browsers that do not support compression  
BrowserMatch ^Mozilla/4 gzip-only-text/html
BrowserMatch ^Mozilla/4\.0[678] no-gzip
BrowserMatch \bMSIE !no-gzip !gzip-only-text/html

# Explicitly exclude binary files from compression just in case
SetEnvIfNoCase Request_URI \.(?:gif|jpe?g|png)$ no-gzip dont-vary
SetEnvIfNoCase Request_URI \.(?:exe|t?gz|zip|bz2|sit|rar)$ no-gzip dont-vary
SetEnvIfNoCase Request_URI \.pdf$ no-gzip dont-vary
SetEnvIfNoCase Request_URI \.avi$ no-gzip dont-vary
SetEnvIfNoCase Request_URI \.mov$ no-gzip dont-vary
SetEnvIfNoCase Request_URI \.mp3$ no-gzip dont-vary
SetEnvIfNoCase Request_URI \.mp4$ no-gzip dont-vary
SetEnvIfNoCase Request_URI \.rm$ no-gzip dont-vary

# properly handle requests coming from behind proxies
Header append Vary User-Agent env=!dont-vary
</IfModule>

谁能指出我哪里出错了?

谢谢,m^e

4

3 回答 3

4

mod_deflate 可能配置不正确。

典型的 mod_deflate 配置可能会根据用户代理字符串排除某些浏览器,并且可能仅配置为压缩某些文件类型 - 由它们在服务器上注册的 MIME 类型标识。

您应该压缩所有的 HTML、CSS 和 Javascript 文件,而不是 PNG、GIF 或 JPEG 文件,而且 Netscape 4 存在您可能想或不想考虑的错误。尝试使用文档中的示例代码

<Location />
    # Insert filter
    SetOutputFilter DEFLATE

    # Netscape 4.x has some problems...
    BrowserMatch ^Mozilla/4 gzip-only-text/html

    # Netscape 4.06-4.08 have some more problems
    BrowserMatch ^Mozilla/4\.0[678] no-gzip

    # MSIE masquerades as Netscape, but it is fine
    BrowserMatch \bMSIE !no-gzip !gzip-only-text/html
    # Don't compress images
    SetEnvIfNoCase Request_URI \
    \.(?:gif|jpe?g|png)$ no-gzip dont-vary

    # Make sure proxies don't deliver the wrong content
    Header append Vary User-Agent env=!dont-vary
</Location> 

还要注意,您发布的 GIDZipTest GZIP 测试不会测试相关的 Javascript 和 CSS 文件,而 YSlow 会 - 在 GIDZipTest GZIP 测试中,您需要单独测试这些文件。

我想您的 ISP 也有可能正在使用缓存代理 - 透明与否 - 它正在破坏或删除您的 Accept-Encoding: 标头。要排除此原因,您可以让某人从您的 ISP 外部对其进行测试。

另一件需要注意的是,当使用 gzip 压缩文件时,您是在用带宽换取 CPU 时间。在较低的压缩强度之上,您将看到带宽节省的回报递减,但所需的 CPU 时间却大幅增加。不幸的是,压缩强度高达 9,您几乎肯定会浪费太多 CPU 时间来改善压缩效果——我总是建议使用强度 1。

于 2009-06-10T06:56:57.717 回答
2

要对 ASP.NET 执行相同操作,请阅读这篇文章 - http://coder.informisk.com/post/2010/01/10/Get-Grade-A-in-YSlow.aspx

于 2010-01-10T14:38:34.063 回答
1

这个网站http://www.rubyrobot.org/article/5-tips-for-faster-loading-web-sites 告诉我 AddOutputFilterByType 在 .htaccess 中不起作用

于 2010-03-23T15:58:49.230 回答