打开淘宝 凡客等等大型网站都可以看到其CSS和JS都是这样引入的:
CSS:(淘宝的):
<link href="http://a.tbcdn.cn/p/fp/2011a/??html5-reset-min.css,global-min.css,header/header-min.css,product-list/product-list-min.css,attraction/attraction-min.css,expressway/expressway-min.css,category/category-min.css,category/sub-promotion-min.css,guide/guide-min.css,hotsale/hotsale-min.css,bottom-gg/bottom-gg-min.css,subfooter/subfooter-min.css,footer/footer-min.css?t=20110721.css" rel="stylesheet" />js:(vancl的):
<script type="text/javascript" src="//js.vanclimg.com/js.ashx?href=[/jquery/jquery-1.4.2.min.js,jquery.lazyload.js,jquery-extend-randomimgplayer.js,jquery.fn.min.js],[/public/cookies_oper.js,ref.js,org.js.jquery.plugins.hoverintent.js,ct.js,google-analytics.js,union_websource.js,trace.js,site_nav.js,autocomplete.js,common.js],[/index/vancl_head.js,indexcontentv7.js]&v=2011072001"></script>请高手解释下这样做的目的和原理 谢谢!
CSS:(淘宝的):
<link href="http://a.tbcdn.cn/p/fp/2011a/??html5-reset-min.css,global-min.css,header/header-min.css,product-list/product-list-min.css,attraction/attraction-min.css,expressway/expressway-min.css,category/category-min.css,category/sub-promotion-min.css,guide/guide-min.css,hotsale/hotsale-min.css,bottom-gg/bottom-gg-min.css,subfooter/subfooter-min.css,footer/footer-min.css?t=20110721.css" rel="stylesheet" />js:(vancl的):
<script type="text/javascript" src="//js.vanclimg.com/js.ashx?href=[/jquery/jquery-1.4.2.min.js,jquery.lazyload.js,jquery-extend-randomimgplayer.js,jquery.fn.min.js],[/public/cookies_oper.js,ref.js,org.js.jquery.plugins.hoverintent.js,ct.js,google-analytics.js,union_websource.js,trace.js,site_nav.js,autocomplete.js,common.js],[/index/vancl_head.js,indexcontentv7.js]&v=2011072001"></script>请高手解释下这样做的目的和原理 谢谢!
同感,这些css,js的地址可能并不是真正的css,js文件,而是一个jsp、servlet之类的东西
<link rel="stylesheet" href="a.css" />
<link rel="stylesheet" href="b.css" />
<script src="a.js"></script>
<script src="b.js"></script>这种情况浏览器每访问一次这个页面就会对服务器产生4个请求去请求这个文件。
这样带来的问题还有,如果样式服务器的根域名与网站存放cookie的根域名相同,每次请求这些静态文件浏览器都会把cookie也带在请求中去请求不需要识别cookie的静态文件中。消耗了服务器和客户端的带宽。
这对访问量很大的网站这样的消耗还是不可小视的。首先淘宝和凡客这么做是为了减少页面请求,这样不仅减轻了服务器访问压力,降低服务器带宽消耗,对客户的用户体验也会更好。抽象出来说就是开发了一套程序,程序接收一个文件列表参数。
程序接收到这些参数后会在服务器上抓取这些文件的内容,通过合并压缩这些文件的内容,然后将其输出到页面上。
相当于合并了所有的请求。假设这个程序的地址是:
http://img.taobao.com/getCss.php
程序接收的参数是csslist
文件列表规则通过|来分割那么上例中的情况就是
http://img.taobao.com/getCss.php?csslist=a.css|b.css
请求的结果就是a.css和b.css合并后的内容,通常还会经过压缩,一些核心的js甚至会混淆输出来达到目的
的后面通常还会跟随一个时间戳,并通过后端技术手段更新各地CDN的缓存和客户浏览器中的缓存
如:
http://img.taobao.com/getCss.php?csslist=a.css|b.css&v=2011072001以达到用户不会因为CDN或本地缓存访问到老文件的目的
这个请求是咋处理的呢- -
不懂,求解
假设url http://.....jquery.min.js&....event-min.js 这个url加载了两个js文件,这两个文件在服务器上是独立存在的,但通过请求这个url他们会被合并 这样达到了用一个<script>标签加载两个甚至多个js文件,大大降低页面渲染所需的HTTP请求数,提高了性能。以上是个人一点愚见,有不妥之处,欢迎各位拍砖指正。
<link href="http://a.tbcdn.cn/p/fp/2011a/??html5-reset-min.css,global-min.css,header/header-min.css,product-list/product-list-min.css,attraction/attraction-min.css,expressway/expressway-min.css,category/category-min.css,category/sub-promotion-min.css,guide/guide-min.css,hotsale/hotsale-min.css,bottom-gg/bottom-gg-min.css,subfooter/subfooter-min.css,footer/footer-min.css?t=20110721.css" rel="stylesheet" />
http://a.tbcdn.cn/p/fp/2011a/ 这个地址对应一个解析文件,
html5-reset-min.css,global-min.css,header/header-min.css,product-list/product-list-min.css,attraction/attraction-min.css,expressway/expressway-min.css,category/category-min.css,category/sub-promotion-min.css,guide/guide-min.css,hotsale/hotsale-min.css,bottom-gg/bottom-gg-min.css,subfooter/subfooter-min.css,footer/footer-min.css?t=20110721.css
这些以,号隔开的都是参数的值,后台处理这些参数加载相应的 css 文件进来。以便于统一管理
百度了下,原来合并文件是这样生成的,呵呵
学习了
http://ued.koubei.com/?p=1193Nginx 和Apache都有此功能
http://a.tbcdn.cn/p/fp/2011a/??html5-reset-min.css,global-min.css,header/header-min.css,product-list/product-list-min.css,attraction/attraction-min.css,expressway/expressway-min.css,category/category-min.css,category/sub-promotion-min.css,guide/guide-min.css,hotsale/hotsale-min.css,bottom-gg/bottom-gg-min.css,subfooter/subfooter-min.css,footer/footer-min.css?t=20110721.css很明显只返回一个文件
最理想状态全部网站的CSS和JS总共只占俩HTTP请求。