张经纬的博客 - 分享互联网

对“打造自己的reset.css”文中观点的不同看法

在小飞的博客上看到他写了一篇关于reset.css的文章,文章中关于css的部分分析的非常不错,但对于文中关于强调把CSS分别配置,对每一个项目都放置一个reset.css这一类观点,我有不同的看法。

诚然,将reset的东西只写进reset.css里,将layer的东西只写进layer.css里,将represent的东西只写进represent.css在思想是没有错的,但是他并没有考虑到一点,那就是成本。

yahoo搞了一个YUI,可是你在Yahoo的主页上能看到YUI的
吗?没有,访问一下google,看看他所有的页面里面有reset这样的东西吗?没有。为什么?成本。

Eric作为个人,可以搞reset.css,YUI作为推动,可以搞reset.css,但是一个网站的架构,是否都应该一股脑的用reset.css?这是根据公司的实际情况来做看的。

让我们以Yahoo为例,我们假定当前我们访问的服务器最大支持2500次并发/秒(不考虑squid,memcache这些东西),当用户访问首页的时候,一共多少个并发?

就目前的情况,一共是26次请求,耗时2.56秒。记做A。

ok,假设yahoo增加了一个reset.css,请求数增加到27次,耗时2.57秒。记做B。

A每秒请求服务器 26 / 2.56 = 10.15 次/秒

B每秒请求服务器 27 / 2.57 = 10.50 次/秒

在A的情况下,1万元的服务器每秒最大支持 2500/10.15 = 246.30 人;
在B的情况下,1万元的服务器每秒最大支持 2500/10.50 = 238.09 人;

换句话说,B运营成本相对于A增加了 (246.30-238.09)/ 246.30 × 10000 = 333.32 元。

仅仅是增加了这样一个文件,我就要多支出333.33元,这样划算吗?

如果按照文中的想法,还要将其他的样式都分门别类的独立出去,那么成本的增长将会是多么可怕的“弧度”

2009-03-08_000700

所以“每每有新项目,第一步就是应当使用一个reset.css来重置样式。”,“建议把.clearfix放入layout.css,而把h1、h2之类的定义放进typography.css”还是应该有所选择的去做。

加入书签:
  • QQ书签
  • 豆瓣
  • 豆瓣九点
  • Haohao
  • RSS
  • email

原文链接|

目前 共有 8 条评论 ,点此发表评论

  1. Shawphy

    三月 8th, 2009 @ 01:37

    观点很不错,作为增加http请求来说确实不合理,所以作为一个兼顾前台设计以及服务器开销的方案,就是一份是作为开发版,每次发布时再生成一份合并且压缩过的公用的css(不同的页面再各自一个,一共2个);同时,也有建议通过程序读取,输出合并后的css的方案。单纯的读取再输出的系统开销是很小的。如果要进一步减少http请求,甚至可以把css和js都合并输出到页面文件上。但随之而来的的就是这些文件不能缓存了,所以全合并到页面的方案并不多见。之间的平衡点可以根据测试得到。前台也有通过合并图片等方式减少http请求的情况。总之只要前台后台通力合作优化页面,才能把成本控制到最低。

    回复

  2. 神飞

    三月 8th, 2009 @ 02:50

    从开发的角度来说,使用CSS Reset是没有错误的,而且也是必须的,这是实现浏览器兼容性的基础。

    但是单纯从网站部署来说,其实目前各大网站更喜欢用的方法是文件压缩,也就是把多个CSS文件(JS也可以这样做)压缩至单个文件中,这样就不用考虑请求的问题。

    YUI也专门开发了一个压缩工具,YUI Compressor,可以使用这个工具将相关的CSS和JS文件压缩一下,压缩后,网站的性能会有非常大的提高。

    当然这样可能会增加一些网站的开发和维护成本,但是从网站性能上来说,是个非常不错的选择。

    回复

  3. 盛传

    三月 8th, 2009 @ 07:53

    我一直使用着轻兼容的原则。因为并发请求的消耗非常大,而对于较大型的实用型网站,我认为在在各种用户环境下,网站界面上只要不出较大的问题,这个CSS就是成功的。

    回复

  4. 张经纬

    三月 8th, 2009 @ 11:49

    @Shawphy
    谢谢,已经在你的博客回复了。

    @神飞
    通过YUI可以在服务器端直接压缩。结合squid和memcache可以达到较为理想的状态。
    不过过多的link是否对客户端的样式渲染有影响呢?刚才想到的。

    @盛传
    俺和你的观点一致。

    回复

  5. 不敢苟同

    三月 24th, 2009 @ 23:49

    =..= 不敢苟同…

    只接用
    引入 YUI 的不就好了??

    回复

  6. Noker

    八月 2nd, 2009 @ 00:28

    不同阶段,不同的情况,不同方式,辩证唯物主义~~~

    回复

  7. Evance

    十二月 30th, 2009 @ 10:54

    说实话,这篇文章大量的数据都是基于”未合并不压缩”的情况下.

    在网站实际部署中,只要做到”合并压缩”的前提.
    提出的异议完全被打破.

    而且在21世纪,以带宽作为运算成本计算主要开销,其实已经是一种滞后的观点.

    这篇文章立足在:
    “小型投入,没有成熟部署(CDN,缓存系统,压缩合并机制)”的条件下.

    不是很合理

    回复

    张经纬 reply on 十二月 31st, 2009 11:00:

    首先感谢指点。
    我个人的看法是,CDN,服务端的压缩时需要成本去做的,具我所知帝联的CDN价格就不是中小网站可以承受的,而有能力做CDN的,例如新浪、网易等门户也是有选择使用。

    带宽一直是运营成本的巨大开销,以前土豆,youku在带宽上的成本投入占总投入的50%以上,这个是有数据可查的,而即便我现在所在的公司,带宽投入成本也按7位数去计算。不过也有带宽成本很少的,例如谷歌,这与机制不同。

    这篇文章还是立足于国内,可能有些观点较为保守,我也赞成你的合并压缩观点。

    不过需要指出的是合并压缩并不是一个简单的东西,它涉及到3方面,合并,压缩,版本管理。

    合并没有什么好说的。

    压缩如果自己去做的话,比较复杂,现在压缩JS的组件很多,packer,jsMin,Esc,JSA,yui-compressor这些都行,但要有一个ANT去在服务端处理。

    而管理就需要使用包管理,否者在CDN中必然会引起缓存的问题,如果每次都手工更新缓存,那就能把人累死:)

    再说下去太多了,就说到这里吧。

    回复