当前位置: 首页 > 图文教程 > 网页制作 > 心得技巧 > taobao cdn性能优化

心得技巧
IE8 Beta 1两个地方需要大家注意
提高网站性能中内容有关的10条原则
网页设计者应该从三个方面优化网页
Web 设计 实现干净代码的12条定律[图文]
网页设计必备工具 firefox Web Developer插件 CSS工具组教程
UCenter Home 站点添加统计代码
9款很棒的网页绘制图表JavaScript框架脚本
提高网站可用性的10个小技巧
网站维护页面的列表制作技巧
B2C 网站用户体验细节设计参考
收集12个实用的网页在线工具
设计参考 漂亮和原创的博客设计
收集25个知名网站标志中使用的字体
极尽简约的网站设计实例
个性化创意鲜明的网站设计实例(30个)
水平滚动的网站设计 小结
更受欢迎 更具创造性的深底色网页设计实例
有创意的关于我们网页页面设计
整洁漂亮的网页设计的4项原则
设计参考 WordPress建站成功案例

心得技巧 中的 taobao cdn性能优化


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-10-01   浏览: 70 ::
收藏到网摘: n/a

web页面缓存影响http请求数和请求文件大小,是影响前端体验最重要的因素。在项目开发中,总会有一些js或者css文件是频繁修改的,比如yahoo的jake中的js标签引用的文件,也总会有一些js或css是永远不会修改的,比如yui的组件js文件,因此在做性能优化的时候这两者应当区分开,即频繁修改的文件减小缓存约束,相对固定不变的文件要强制缓存。

从http协议和浏览器的工作机制的角度讲,总会有一些不确定因素在影响缓存的实际发生,比如如果浏览器设置所有文件都不缓存,服务器端的任何缓存优化都不起作用,所以应当使用多手段配合完成合理的缓存设计,使得网站既可以随时更新又能保证饱和的缓存,以保证良好的用户体验。在yui的框架下,种子文件总会占用一个http请求,也就是说,浏览器在解析script标签的时候,去处理这个src所指向的js文件通常会带有Cache-control: no-cache,或者Cache-Control: max-age=0,这种情况下服务器端返回的Cache-Control自然不会起作用。比如taobao首页的tbra种子文件,无论如何都会带一个cache-control的标签,如图:



因此这个种子总会占用一个http请求,而由yui动态加载的js文件和css文件则会被强制缓存,通过js发起的http请求是可以定义http的头字段的,但往往需要cdn服务器的支持,比如cn.yimg.com、taobao的cdn和老美的yimg都强制将资源文件缓存10年。比如这个是老美的yimg过期时间,上图的taobao cnd也是如此。



真正起作用的缓存则是在动态加载js的过程中,也就是说只有yui动态get一个javascript文件的时候才会在请求的时候加上Cache-Control字段,这样的话浏览器就会截获这个请求,根据Cache-Control字段的参数去本地缓存中取文件,这样就不会实际占用一个http请求,这对页面的性能提高是有决定性作用的。这也是为什么yui团队始终如一的推荐使用loader动态加载模块的原因。也正是因为这样,用手写script标签的形式来取js文件是非常耗费性能的。比如这样一个测试页面,清空缓存后的所有12个js请求每个都是完整的200http请求:



当按f5刷新的时候就变为:



这样实际请求数就降低为2个,这就是yui动态加载js文件的优势,而在taobao首页不论怎么按f5刷新,请求数都不会减少。

如果请求数无法降低下来,则可以减小请求本身的大小,常用的是最后修改时间和Etag两个字段,etag更加常用也更加准确一些,etag可以判断文件是否被修改过,如果修改过则返回一个200的http回应,如果没有则返回304,告诉浏览器取缓存取文件。使用etag其实用最简单的摘要算法就可以,比如md5,反正只是一个完整性判断。雅虎的yimg服务器能更加精准的判断文件是否修改,因此即便js文件的请求是通过手写script标签发起的,也会返回304,可以看到yahoo首页f5刷新后,yimg域的js请求全都是304,有一半的内容是从缓存中取的:



而taobao的cdn就不那么准确了,用f5刷了很多次taobao首页,发现那个顽固的tbra.js始终是200,如图:



这里的cn.yimg.com的js乖乖的返回了304,而tbra始终是200,这会就造成贷款浪费,还好文件只有25k,对体验影响不大,可能是taobao的cdn没有对etag做优化,我看到的每次etag都是不一样的,按理说文件不修改etag应该不变才对,是加了时间戳的原因吗,还需要再研究研究。