静态资源打包:一个javescript 的src引用多个文件,一个link引用多个CSS文件

疑惑描述:

查看了淘宝网的首页源文件,看到这样的一个特殊的

<script src="http://a.tbcdn.cn/??s/kissy/1.1.6/kissy-min.js,p/global/1.0/global-min.js,p/et/et.js?t=2011092320110301.js"></script>

里面用逗号分隔了几个js文件kissy-min.js,p/global/1.0/global-min.js,p/et/et.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,local-life/local-life-min.css,footer/footer-min.css?t=20111213.css" rel="stylesheet">

又如虾米中的(http://res.xiami.net/??static/js/lib/jquery.tmpl.min.js,static/js/app/relation.js,static/js/app/nameCard.js?ver=20140116-175037)

解答:

这个叫静态资源打包,因为浏览器下载静态文件的时候是有线程数限制的,所以下载1个100K的js/css,会比10个10k的js/css快的多,为了提高性能,服务器端会把js/css合并成一个文件(因为都是文本嘛)再向客户端输出。比如,一个请求的地址是:http://www.abc.com/static/pack?js=a,b,c,d,e,那么服务器端你在这个请求的接口里,根据js参数的值,把a.js到e.js的内容读取出来,再合并成一个文件(一般同时还会压缩,比如去空格,比如缩短变量名等),输出到客户端。如果服务器端再加上缓存,那可能连合并都不需要了。这样页面加载速度会快非常多。比较常用的js打包工具有google的google closure,css用yui compressor。基本思想就是这样,具体的你可以搜一下。

http://a.tbcdn.cn/??s/kissy/1.1.6/kissy-min.js,p/global/1.0/global-min.js,p/et/et.js?t=2011092320110301.js 虽然你看着像三个js文件用逗号分隔,其实对javascript来说是一个文件名,你可以复制放在浏览器地址栏里访问的。可能实际确实是三个js文件 的,但是通过http://a.tbcdn.cn这个服务器程序资源打包以后,做为一个response了,这样减少请求服务器端的次数提高性能。

href中的内容:http://st.******.com/??css/basic/core_mod.css,res/css/default/main15.css,res/css/default/beta15.css,res/player/img/web_player.css?v10182012,其实真实的指向地址是:http://st.******.com/,?后面的内容是查询字符串,服务器端会解析这个查询字符串中包含的多个文件,并且合并到一个文件中,最终的目的是减少浏览器发出请求的次数,达到优化页面打开时间的效果。

许多高浏览量的大型网站 为了方便加快网站的显示速度,减少页面的缓冲,将多个js/css文件合并成一个,这样当用户打开网站的时候,一个js/css链接就只需要像服务器发送一次请求,如果是多个,则需要执行多次请求.所以这样减少了向服务器发送请求的次数,用户查看到完整页面的速度也快了很多,因为很多用户并不愿意在等待网站页面缓冲上花费太多时间.

你可以看看这个http://www.cnblogs.com/shoupifeng/archive/2010/01/12/1645431.html

淘宝还有很多类是的案例,比如淘宝商城一个很长的商品介绍页面,为了加快页面显示速度,只显示你浏览器大小的页面内容,下面你没看到的内容先不显示,当你将鼠标移到下面看其他商品图片的时候,它才像服务器发送请求来显示下面的页面内容

这个叫 图片延迟加载技术(ImageLazyLoad)

一个link引用几个css文件合适,大型网站的话肯定不止一个css文件·???

网站首先要进行CSS文件合并和压缩,如果合并压缩后还有多个的话可以使用这种方式进行合并请求,服务器端再对文件进行整合合并,至于引用几个CSS文件合适,这个没有具体的要求,但是合并压缩后的CSS文件不会太多吧!

延伸:http://www.cnblogs.com/shoupifeng/archive/2010/01/12/1645431.html

http://www.infoq.com/cn/articles/front-end-engineering-and-performance-optimization-part1

上一篇:MySql背后的故事(二)


下一篇:IdentityServer4 中文文档 -15- (快速入门)添加 JavaScript 客户端