淘宝UED团队经常写一些很棒的技术文章,令我印象深刻的有一句话,大意如下:
引用
虽然这种方法比较hack,但是可以减少2个HTML标签,考虑到我们是做超大流量的互联网应用,这样可以节省大量的带宽
可是打开淘宝首页,查看源代码,从大流量互联网应用来看,有很多地方可以批一批:
1. 内嵌大量的CSS/JS代码(CSS 25K/JS 18K左右),浪费大量的带宽,除了一些经常会变动的代码,完全可以将大部分内容移到外部css/js文件,客户端可以享受到文件缓存带来的好处,减少带宽。
2. 使用了<base target="_blank" />,默认所有的链接都在新窗口打开,可是还有很多链接指定了target="_blank",浪费带宽。
3. 源代码里面使用了大量的HTML注释,如果是自动生成的还情有可原,但是这些"<!--搜索框结束-->", "<!--广告轮播-->" 完全是属于给开发人员看的,甚至连"<!--海外用户特殊对待,yuyin,2009-03-05-->"这种属于版本控制的注释都丢上来了,还是浪费带宽。这些完全可在发表到生产环境时通过脚本自动去除,
4. 一些细节,比如给很多元素加了ID,而这个ID既不用在css selector,又没有JS对它操作。 再比如在页面最下面用一个白色字体显示服务器id,而这个东西完全可以写成注释的方式,以节省html标签和相关的CSS代码。
淘宝的朋友,我知道你们在努力营造一个氛围:淘宝很重视技术,重视细节。可是这些东西怎么也不象是一个重视技术细节的团队搞出来的吧?
======答复分割线======
醒来 写道
作为淘宝UED团队中的一员,我简单的说明一下:
1. 首页是淘宝的入口,PV非常高,服务器压力也大。“快”是第一位的用户体验。内嵌css和js就是为了减少对服务器的http请求数。原因有三: 1)根据研究,会有20%的用户是无缓存的情况下访问淘宝网,此时无法利用客户端缓存。2)减少http连接数可以减少服务器压力,同时减少无谓的http头信息的上传。3) gzip压缩会大量减少下载量。所以经过对比和权衡,我们选择内嵌css/js。
2. 首页是动态生成,有很多CMS维护的内容。很多时候超出我们的控制。我们正努力不断改善,增强控制能力。
3. 无谓的注释确实是应该删除的,不过注释也会减少跨团队之间的磨合成本。这也是一个权衡的过程。我们也在不断改善注释规范。
4. 试试Ctrl+A
1. 首页用内嵌css和js确实可以
减少http请求,但是这会
增加页面大小,如何取舍是需要用数据支持的:
内嵌的css/js在gzip之后也有8.6K大小,用外联的话多2个http header,因为走CDN服务器,所以没有cookie等头信息,通常1个js+1个css请求的头信息大小在0.5K左右,8.6K * 80% v.s 0.5K * 100%,对比和权衡是如何会选择后者呢?
至于说到"快",淘宝首页,已经有9个js, 3个css和100来个iframe/图片请求,用内嵌的方式减少2个http请求,有意义吗?
Yahoo在首页也采用内嵌js/css,但是它只有3个js, 0个css,和20多个图片请求,这种对比下,用内嵌对于用户体验才算得上改善。
3. 我不是说不写注释,而是指发布到服务器的时候用脚本清理一下,一个正则表达式就可以替换掉了。
4. Ctrl+A能够让用户看到最下面的服务器编号,可是这有什么用途?