Dreamhost上的GZIP & Cache

用WordPress的都知道,WordPress可以打开GZIP传输,压缩比率能达到60%到80%。下表是本blog首页Web Page Analyzer上的测试报告,此页面上包括css, js所有东西加起来才14K。

QTY SIZE# TYPE URL
1 6999 HTML http://zhiqiang.org/blog/
1 2593 SCRIPT http://zhiqiang.org/blog/.../comment.js.php
1 2302 SCRIPT http://zhiqiang.org/.../all.js.php
1 2048 CSS http://zhiqiang.org/.../style.css.php
1 431 IMG http://feeds.feedburner.com/~fc/zhiqiang
5 ^ 14373* Total (^unique objects)

Dreamhost还用的是Apache 1.3(Am I wrong?),所以没有mod_deflate模块,而用的是mod_gzip模块,这个模块直接在磁盘上读写,效率比前者要低。不过有总比没有好,毕竟压缩比率很高。

但诡异的是,服务器默认对CSS和JS不作压缩。写信去问了dreamhost客服,也没有什么好方法。最后我采用的方法是用php给包一层:用style.css.php来代替style.css:

<?php # this is the file style.css.php, who contains style.css
# set the request file name
$file="style.css";

# Set Expires, cache the file on the browse
# Delete it if you don't want it
header("Expires:".gmdate("D, d M Y H:i:s", time()+15360000)."GMT");
header("Cache-Control: max-age=315360000");

# set the last modified time
$mtime = filemtime($file);
$gmt_mtime = gmdate('D, d M Y H:i:s', $mtime) . ' GMT';
header("Last-Modified:" . $gmt_mtime);

# output a mediatype header
$ext = array_pop(explode('.', $file));
switch ($ext){
case 'css':
 header("Content-type: text/css");
 break;
case 'js' :
 header("Content-type: text/javascript");
 break;
case 'gif':
 header("Content-type: image/gif");
 break;
case 'jpg':
 header("Content-type: image/jpeg");
 break;
case 'png':
 header("Content-type: image/png");
 break;
default:
 header("Content-type: text/plain");
}

# GZIP the content
if(extension_loaded('zlib')){ob_start();ob_start('ob_gzhandler');}

# echo the file's contents
echo implode('', file($file));

if(extension_loaded('zlib')){
ob_end_flush();
# set header the content's length;
# header("Content-Length: ".ob_get_length()); # (It doesn't work? )
ob_end_flush();
}
?>

上面代码不仅压缩代码,而且要求浏览器端Cache这个文件。甚至,可以把所有css文件都放到一个php文件里,只要在echo处加入多个文件即可。

下面是一些常用的测试网站:

参考资料:

查看更多关于, , , , 的内容。

你可能感兴趣的
相关文章

16条留言 -> 跳到留言表格

  • At 2007.04.01 23:51, Chaney said:

    good job

    • At 2007.04.02 02:12, Michael said:

      太厉害了,把速度做到极致了。

      • At 2007.05.06 00:57, apher said:

        不知道bH能不能压缩CSS和JS格式呢?
        现在你站的速度比以前又快了

        • At 2007.05.06 13:38, zhiqiang said:

          BH也不能压缩CSS和JS,而且HTML也不能压缩,实在是一个非常发指的事情。我现在不得不把我的静态页面又用php处理一遍。

          • At 2007.05.07 00:06, apher said:

            不知道以前的版本,不过DH现在的Apache版本是2.0的
            不知道mod_deflate压缩效果比Gzip高出多少?

            • At 2007.05.07 12:15, zhiqiang said:

              晕,一直没有意识到DH还有apache2。查了一下,的确新的服务器是apache2。而且如果你的服务器上还是apach 1.3,可以通过添加a subversion repository的方式,域名将自动转到apache2的机器上。也可以通过向客服提交申请的方式。见http://forum.dreamhosters.com/beginners/65491-version-of-Apache.htm。

              mod_deflate的压缩效果和GZIP差不多,他们用的算法都差不多的。不过deflate是内存操作,gzip是磁盘操作,后者的限制主要在于磁盘I/O的速度。所以,deflate要好一些。

              俺亏了,不知道BH有没有类似的东西。

            • At 2007.05.07 00:10, apher said:

              还有一个问题,用Cacheability Test:这个工具看来才知道,做过301重定向的元素,包括图片都不能被cache,不知道对速度有什么影响

              • At 2007.05.07 12:19, zhiqiang said:

                图片你做301重定向干嘛?

                最好的cache是浏览器直接利用机器cache,连头文件都不发(只适用于源文件很少变动的文件,比如固定下版本的css,js),这样你服务器段做没做重定向,浏览器这里根本就不知道,也就无所谓了。

                这样的cache可以通过php header要求浏览器段执行,我给的那些代码的第二段就是。

                • At 2007.05.09 08:25, apher said:

                  谢谢~
                  不是单独图片做重定向,是整站做了重定向

              • At 2007.06.26 17:07, Justin said:

                效果真是太明显了~~哈哈

                • At 2007.06.27 11:37, Gzip压缩css和js文件 - Ks Home said:

                  [...] 现在使用阅微堂提供的Gzip压缩代码如下: <?php [...]

                  • At 2008.03.04 17:47, Darren said:

                    不知道为什么,我的站上用 mod_deflate 不能压缩 ... jQuery 一下就占掉30K...

                    • At 2008.08.06 23:59, 禅猫 said:

                      请教下!

                      wp2.51 怎么启用 GZIP 、、

                      • At 2008.08.07 07:44, zhiqiang said:

                        WP 2.5和以上版本移除了对于GZIP的控制选项。要想使用GZIP,你可以在服务器端打开这个选项。或者使用插件,比如用这个

                      • At 2008.08.07 23:04, 禅猫 said:

                        唔,等下..我又测试了下.我的日志页面去检测的话 会检测到开启和压缩率..首页检测不到..!我去关闭这个插件,;来测试下 是否像传言说的那样 2.51检测服务器使用可以GZIP 而自动开启.!

                        • At 2008.08.07 23:07, 禅猫 said:

                          唔.看来传言是假的,并非根据服务器是否支持而开启的.嗯 谢谢了~!
                          开启也关闭这个插件 虽然压缩了 但速度无明显变化!.等需要的时候在开启吧!
                          终于弄明白2.51 GZIP了 .谢谢!

                          (Required)
                          (Required, not published)

                            B | I | U | D | 添加链接 | 插入引用 | 插入代码 | 插入表情 | | + | ?
                          guest | 注册 | BBS | 管理 | English | 繁體 | https
                          Loading...
                          Loading...
                          Loading...