YSlow为使用mod_deflate压缩的文件提供F等级

时间:2009-06-10 06:27:28

标签: compression gzip yslow mod-deflate

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

  • 减少HTTP请求次数( C级 - 我还在继续努力 统一图像)
  • 使用gzip压缩组件(成绩 ˚F

YSlow仍然用F报告,并告诉我在我的CSS和JS文件上使用gzip。以下是YSlow报告的截图(该域名因隐私而被模糊)screenshot of YSlow report

但是, 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>

任何人都可以指出我哪里出错了吗?

谢谢, 米^ E

3 个答案:

答案 0 :(得分:4)

mod_deflate可能配置错误。

典型的mod_deflate配置可能是基于用户代理字符串排除某些浏览器,并且可能只能配置为压缩某些文件类型 - 通过其MIME类型标识为在服务器上注册。

您应该压缩所有HTML,CSS和Javascript文件,但不能压缩您的PNG,GIF或JPEG文件,并且您可能想要或可能不想考虑Netscape 4的错误。尝试使用sample code from the documentation

<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的强度。

答案 1 :(得分:2)

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

答案 2 :(得分:1)

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

中不起作用