在博客园前辈 Cat Chen 的一文 对博客园URL的一些调整建议 中提到二级域名机制不利于搜索引擎的
收录, 听了颇有感叹, 我的博客到现在为止还只被google收录了首页呢,文章一篇也没录取. 当然文章没有被
收录的原因主要和我在博客园安家时间短(才一个星期),文章数量不多有关.
下面我来说说在二级域名情况下,ie 浏览器缓存策略的问题吧.
1. 对于网站优化来说,缓存优化是最为重要的一环,对于一些常用的,.静态的文件和
数据(主要是js,css,jpg,gif,静态html),只要用户浏览过一次,这些资源就应该被缓存起来,
等下次再访问的时候直接从客户端的缓存里面取,而不是通过internet从服务器上重新读取.
幸运的是:
浏览器都很聪明,对于静态image,js,css他都会自动缓存.
程序员更聪明,他们会告诉浏览器,禁止缓存那些动态的数据文件,比如 test.asp?action=update&id=1之类.
不幸的情况是:
1。浏览器缓存资源的时候是根据类似于 (http://......)等绝对路径来存取的.
所以对于下面这个文件: HeaderBg.jpg
如果您通过 http://www.cnblogs.com/ashun/ 来访问我的博客的话,浏览器将缓存下面这个地址:
http://www.cnblogs.com/Skins/KJC/Images/HeaderBg.jpg
但是如果您通过 http://ashun.cnblogs.com/ 来访问我的博客的话,
浏览器竟然完全不知道缓存里面已经有 HeaderBg.jpg这个文件.
还是重新通过internet去服务器读取 这个文件,并缓存以下地址:
http://ashun.cnblogs.com/Skins/KJC/Images/HeaderBg.jpg
在浏览器的眼里, www.cnblogs.com/ashun 和 ashun.cnblogs.com 是两个不同的网站,那文件当然被认为是不同的文件咯
对于缓存里面的文件是通过绝对路进来存取的
让我们来分析一下真实的数据.
我刚刚依次访问过 http://ashun.cnblogs.com/ http://www.cnblogs.com/ashun/ http://www.cnblogs.com/cathsfz/
Line | Started | StartedDateTime | Size | Result | URL |
1 | 00:00:00.000 | 2006-Dec-04 06:48:04.532 | 54524 | 200 | http://ashun.cnblogs.com/ |
2 | 00:00:01.444 | 2006-Dec-04 06:48:05.976 | 7539 | 200 | http://ashun.cnblogs.com/Skins/KJC/style.css |
3 | 00:00:02.065 | 2006-Dec-04 06:48:06.597 | 824 | 200 | http://www.cnblogs.com/ashun/customcss.aspx |
4 | 00:00:02.457 | 2006-Dec-04 06:48:06.989 | 18479 | 200 | http://ashun.cnblogs.com/Skins/KJC/Images/HeaderBg.jpg |
5 | 00:00:02.466 | 2006-Dec-04 06:48:06.998 | 653 | 200 | http://www.cnblogs.com/images/xml.gif |
6 | 00:00:02.521 | 2006-Dec-04 06:48:07.053 | 396 | 200 | http://ashun.cnblogs.com/Skins/KJC/images/SubHeaderBg.gif |
7 | 00:00:02.605 | 2006-Dec-04 06:48:07.137 | 1097 | 200 | http://ashun.cnblogs.com/Skins/KJC/Images/icon-group.jpg |
8 | 00:00:02.648 | 2006-Dec-04 06:48:07.180 | 4004 | 200 | http://www.cnblogs.com/images/cnblogs_com/ashun/77221/t_lishun.JPG |
9 | 00:00:02.695 | 2006-Dec-04 06:48:07.227 | 0 | (Cache) | http://ashun.cnblogs.com/ |
10 | 00:00:02.928 | 2006-Dec-04 06:48:07.460 | 378 | 200 | http://ashun.cnblogs.com/Skins/KJC/Images/xmlsmall.gif |
11 | 00:00:03.025 | 2006-Dec-04 06:48:07.557 | 653 | 200 | http://ashun.cnblogs.com/images/xml.gif |
12 | 00:00:03.324 | 2006-Dec-04 06:48:07.856 | 1000 | 200 | http://www.cnblogs.com/ashun/images/icon-titledoc.gif |
13 | 00:00:05.081 | 2006-Dec-04 06:48:09.613 | 2843 | 200 | http://ashun.cnblogs.com/script/ShowHidden.js |
14 | 00:00:05.629 | 2006-Dec-04 06:48:10.161 | 397 | 200 | http://ashun.cnblogs.com/Skins/KJC/images/ColumnHeaderBg.gif |
15 | 00:00:25.166 | 2006-Dec-04 06:48:29.698 | 54517 | 200 | http://www.cnblogs.com/ashun |
16 | 00:00:25.951 | 2006-Dec-04 06:48:30.483 | 7539 | 200 | http://www.cnblogs.com/Skins/KJC/style.css |
17 | 00:00:26.470 | 2006-Dec-04 06:48:31.002 | 0 | (Cache) | http://www.cnblogs.com/ashun/customcss.aspx |
18 | 00:00:26.486 | 2006-Dec-04 06:48:31.018 | 18479 | 200 | http://www.cnblogs.com/Skins/KJC/Images/HeaderBg.jpg |
19 | 00:00:26.553 | 2006-Dec-04 06:48:31.085 | 396 | 200 | http://www.cnblogs.com/Skins/KJC/images/SubHeaderBg.gif |
20 | 00:00:26.630 | 2006-Dec-04 06:48:31.162 | 1097 | 200 | http://www.cnblogs.com/Skins/KJC/Images/icon-group.jpg |
21 | 00:00:26.641 | 2006-Dec-04 06:48:31.173 | 1000 | 200 | http://www.cnblogs.com/ |
22 | 00:00:26.676 | 2006-Dec-04 06:48:31.208 | 378 | 200 | http://www.cnblogs.com/Skins/KJC/Images/xmlsmall.gif |
23 | 00:00:27.182 | 2006-Dec-04 06:48:31.714 | 1000 | 200 | http://www.cnblogs.com/ashun/images/icon-titledoc.gif |
24 | 00:00:28.471 | 2006-Dec-04 06:48:33.003 | 2843 | 200 | http://www.cnblogs.com/script/ShowHidden.js |
25 | 00:00:29.252 | 2006-Dec-04 06:48:33.784 | 397 | 200 | http://www.cnblogs.com/Skins/KJC/images/ColumnHeaderBg.gif |
26 | 00:00:42.287 | 2006-Dec-04 06:48:46.819 | 58979 | 200 | http://www.cnblogs.com/cathsfz/ |
27 | 00:00:42.910 | 2006-Dec-04 06:48:47.442 | 0 | (Cache) | http://www.cnblogs.com/Skins/KJC/style.css |
28 | 00:00:43.099 | 2006-Dec-04 06:48:47.631 | 509 | 200 | http://www.cnblogs.com/cathsfz/customcss.aspx |
29 | 00:00:43.350 | 2006-Dec-04 06:48:47.882 | 0 | (Cache) | http://www.cnblogs.com/Skins/KJC/Images/HeaderBg.jpg |
30 | 00:00:43.667 | 2006-Dec-04 06:48:48.199 | 3238 | 200 | http://www.copyblogger.com/wp-content/themes/copyblogger_20/images/rss.gif |
31 | 00:00:43.988 | 2006-Dec-04 06:48:48.520 | 1198 | 200 | http://www.cnblogs.com/Skins/KJC/images/icon-titledoc.gif |
32 | 00:00:46.854 | 2006-Dec-04 06:48:51.386 | 0 | (Cache) | http://www.cnblogs.com/script/ShowHidden.js |
说明一下:
Size是文件大小,如果是0,.则说明是读取的cache
Result如果是200则说明是读取的服务器,(Cache) 或者 304 则读取Cache
我们可以看到访问不同的二级域名,几乎所有的image 和 js 均是重新请求的,尽管他们是同一个文件.
博客园那么多的博客,如果访问每个人的博客,这些资源都只需要读取一次,不管对减轻服务器负担和提高
客户端浏览速度都是有很大帮助的.
解决办法:
强制采用统一的绝对地址来访问资源.
例子:
css文件:
background-Image:url(skins/kjc/images/test.gif)
===>
background-Image:url(http://www.cnblogs.com/skins/kjc/images/test.gif)
html文件:
<script src="test.js"></script>
<link id="MainCss" type="text/css" rel="stylesheet" href="/Skins/KJC/style.css" />
===>
<script src="http://www.cnblogs.com/test.js"></script>
<link id="MainCss" type="text/css" rel="stylesheet" href="http://www.cnblogs.com/Skins/KJC/style.css" />
js文件:
var img=new Image()
img.src="go_rush.gif"
===>
var img=new Image()
img.src="http://www.cnblogs.com/go_rush.gif"
下期节目预告:
怎么禁止浏览器,怎么删除客户端缓存? 对于动态页面,asp,php大家或许都知道通过http-header来控制cache了
对于静态文件 (gif.jpg,css,js)呢,怎么做?。。。 敬请关注,下期为您精彩献上