在博客园前辈 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://images.cnblogs.com/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://images.cnblogs.com/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)呢,怎么做?。。。 敬请关注,下期为您精彩献上