本文使用「署名 4.0 国际 (CC BY 4.0)」许可协议,欢迎转载、或重新修改使用,但需要注明来源。 [署名 4.0 国际 (CC BY 4.0)](https://creativecommons.org/licenses/by/4.0/deed.zh) 本文作者: 苏洋 创建时间: 2011年02月02日 统计字数: 4434字 阅读时间: 9分钟阅读 本文链接: https://soulteary.com/2011/02/02/%E6%B5%85%E8%B0%88%E7%BD%91%E7%AB%99%E8%AF%B7%E6%B1%82%E5%92%8C%E7%BC%93%E5%AD%98%E4%BC%98%E5%8C%96%E4%B9%8B%E4%B8%80.html ----- # 浅谈网站请求和缓存优化之一 这个话题或许被各路高手谈论过了很多篇,但是我感觉,很多都是伪高手吧,为什么这么说呢,你会发现他们发的代码基本都很雷同,可能个别的地方不一样,比如变量,还有网站名称,呵呵。 网站优化规则中,google告诉我们要注意Combine external JavaScript(合并外部javascript文件)和Combine external CSS(合并外部css样式表文件)还有Combine images into CSS sprites(使用CSS sprites来拼合小图片们)。 yahoo同样告诫我们Make fewer HTTP requests(尽可能减少http请求数量)。 这些道理大家应该都懂吧,我就不赘述了,如果有疑问的话,可以百度或者谷歌一些高手们的文章。 我只说我们这些一般人士该怎么简单的优化网站请求数目和缓存。 首先具体谈谈合并外部css和javascript文件,并且要做到伪装静态文件。 以php脚本为例,用包含文件来实现。 ```php ``` 合并JS代码类似, ```php ``` 这样你访问Packed.js.php或Packed.css.php的时候,外部的JS,CSS文件变合并为一个,并使用GZIP压缩后输出了。 如果你的外部文件多的话,那么可以节约不少请求数量。 但是访问路径为 http://yourwebsite/yourpath/Packed.js.php 这样不利于SEO路径规则,还好apache等服务器软件支持rewrite。 在.htaccess文件中写入规则 ```apache #author:soulteary@qq.com RewriteEngine On RewriteRule ^/?Packed\.js$ Packed\.js\.php [L] RewriteRule ^/?Packed\.css$ Packed\.css\.php [L] ``` 这下,访问路径变为 http://yourwebsite/yourpath/Packed.js了, 但是呢传值后,路径会变成难看的http://yourwebsite/yourpath/Packed.js?mode=work 给静态变量传值,属于优化尽量避免的内容 google 告诉我们要“Remove query strings from static resources” 也就是移除静态资源中的请求字串。好吧,apache大神,继续满足我的愿望吧。 首先是完善最后的路径样式,比如即使我传值后,我还想保持后缀是.js,防止一些工具或者浏览器抛锚。 http://yourwebsite/yourpath/Packed.js?mode=work&file=2.1.js ```apache RewriteEngine On RewriteRule ^/?Packed\.js$ Packed\.js\.php [L] RewriteRule ^/?Packed\.css$ Packed\.css\.php [L] RewriteRule ^Packed-(.+)-(\d{1}\.\d{2}+)\.js$ Packed\.js\.php?mode=$1&file=$2\.js [L] RewriteRule ^Packed-(.+)-(\d{1}\.\d{2}+)\.css$ Packed\.css\.php?mode=$1&file=$2\.css [L] ``` 这样访问脚本的时候,链接就变成了纯正的静态链接,如http://yourwebsite/yourpath/Packed-work-2.1.js 而且因为脚本主动发送了header,即使服务器htaccess设置了set header,也不会造成影响。 明天继续写关于图片缓存的事情吧。