小议网页性能和前端编码质量

| 4 条评论 2008-08-14 02:17:44

我一直比较在意页面的性能和编码质量,有时候会通过HTML代码的质量来判断一个网站的技术水平。

易趣、eBay和淘宝在网页性能和前端编码质量上的简单对比

昨天下午闲来无事,去久违的易趣转了转,发现他们的浏览器兼容性还是一如既往地好。可看看“我的易趣”页面的源代码,就觉得有点头大-不仅HTML/CSS/JS全部都混杂在一起,而且代码显得非常凌乱,还大量使用了表格来定位。当我把CSS禁用掉,再把浏览器窗口调到320像素这么宽后,网页已经基本无法阅读了。

下图是其YSlow得分,老实说,37分并不是个理想的成绩。对于这样大规模的网站来说,如何通过规范来保证多人协作编码时的质量,以提升工作效率、减少沟通成本,并且给网站提速减负,是个重要且紧急的问题。

易趣的表现让我对eBay很好奇-看看高手云集的eBay情况如何。

结果令人惊讶(如下图),“My eBay”的YSlow得分居然高达97!只有一项因为没有加Expires header而得了B,此外全部是A。这恐怕是我见过的最高的YSlow得分了。

但是这个页面的编码质量并不如想象中的好,问题和“我的易趣”页面如出一辙。强调可访问性(accessibility)508法案似乎被eBay完全忽视掉了。

不过值得一提的是,eBay的js写得非常强悍,单从函数的命名就可见一斑了。

接下来我又测试了一下“我的淘宝”,淘宝的代码明显漂亮了很多。它的YSlow得分为39(如下图),

从上图来看,淘宝丢分主要在1)过多的引入外部资源,比如18个js和16次DNS查询;2)Apache和CDN的设置(其实根源在各种广告提供商,10个没有经gzip压缩的js里面有9个都是广告相关的)。

替前端鸣冤

有很多人不理解为什么在拥有众多高手的大型互联网站,页面的代码还能如此之乱。难道这些前端开发不知道W3C,不知道js要做到无侵入(unintrusive)么?

当然不是,其实这里面的原因挺多的,也不是一两句话能讲的清楚。在所有的原因中,以下两条可能是最关键的:

  1. 缺乏规范,或者具备规范,但缺少强有力的执行机制。在前端打交道最多的三种语言中,只有Javascript算是程序语言,HTML和CSS根本就是描述性的语言。最让人头疼的是,它们远不象具有很多相同特点的XML那么严谨,自身的描述能力又不强,所以几乎不可能写出类似Java那样规范的代码来。程序语言中常用的框架,到了HTML和CSS这里也起不到作用,甚至它们两个根本就产生不了框架(那些所谓的CSS框架,在能力上和真正的程序框架差的太远了,我觉得顶多算是CSS模式[Pattern])。要部分解决这个问题,我提倡用真正的程序语言,比如Velocity/PHP/Ruby等对HTML进行二次封装,实际上本站上面的很多东西就是靠helper(助手,MVC中View的一个组成部分,可以理解成帮助页面显示的一些程序)渲染出来的;
  2. 系统逻辑太复杂,以至于顺利完成工作都变成了一个不小的挑战,更别说还管什么性能和质量了。写到这里想起曾经写过的一个control(控件,MVC中View的一个组成部分,可以理解成页面上的一个复用的元素),在当时紧张的时间里,control里面的代码质量已经算是不错的了(跟我搭档的几个Java程序员这么认为,其实我觉得一般,不过确实没时间写得更好了),可仍没办法做到把HTML、Javascript和Velocity代码完全分开,因为判断的逻辑太多太复杂。以至于在浏览器中看到的东西,比如一个小小的下拉菜单,它背后所隐藏的东西可能超乎想象。
    
  1. http://www.gravatar.com/avatar/db33090541526c03c798f82aa0a5dbaa/?default=http%3A%2F%2Fheartstringz.net%2Fblog%2Favatar.php%3Favatar%3Ddb33090541526c03c798f82aa0a5dbaa.gif.gif lifesinger 2008-08-14 18:18:37

    可看看“我的易趣”页面的源代码,就觉得有点头大-不仅HTML/CSS/JS全部都混杂在一起,而且代码显得非常凌乱

    文中提到 我的ebay 也是这样。这个很可能是因为ebay是组件化的,每个组件有自己的css和js,很多组件拼装成一个页面时,自然就显得很乱了,但从开发上讲,这样可能是趋势

    对于YSlow的评分,有些项没必要看得那么重

  2. http://www.gravatar.com/avatar/786c64061460b4c7184bc16f9f7a18cc/?default=http%3A%2F%2Fheartstringz.net%2Fblog%2Favatar.php%3Favatar%3D786c64061460b4c7184bc16f9f7a18cc.gif.gif taine 2008-08-14 19:29:04

    淘宝的页面让人烦死了,载入实在是太慢了,机子差点都不能看。

    代码复杂的另一个根本原因可能是业务复杂,要满足各个部门的需要。

  3. http://www.gravatar.com/avatar/c748792451206695e808c05e6f8c5204/?default=http%3A%2F%2Fheartstringz.net%2Fblog%2Favatar.php%3Favatar%3Dc748792451206695e808c05e6f8c5204.gif.gif Felix 2008-08-15 01:14:19

    @lifesinger:

    不管组件化与否,我觉得以eBay的技术水平,它的代码应该写得比现在好得多才对。

    @taine:

    改版前的淘宝首页有时候会让我的FF假死(也和OS X下FF的执行效率有关),现在比以前要好多了。

    另外,我说的第二点原因就是业务/系统复杂,因为业务复杂,所以系统复杂,所以(渲染出来的)代码凌乱。

    其实我觉得渲染出来的代码乱点就罢了,毕竟那么复杂的系统。但是模板里面的代码一乱,那才让人头两个大呢。

  4. http://www.gravatar.com/avatar/d6f3b4423cd4ec59aca534c6f582b21b/?default=http%3A%2F%2Fheartstringz.net%2Fblog%2Favatar.php%3Favatar%3Dd6f3b4423cd4ec59aca534c6f582b21b.gif.gif shanghaikid 2008-08-16 03:46:06

    大型网站 unintrusive 的js其实并不推荐,要知道一张页面的代码很可能几千行,即使是ondomready来执行行为层的js,也是很慢的一件事情。

    至于规范么,基本一个项目一个前端,没必要把个人写代码的风格框死,大原则对,就可以了。

有什么要说的,尽管来

(支持Gravatar
  • angel.gif
  • angry.gif
  • ask.gif
  • bad_smile.gif
  • big_smile.gif
  • caresse.gif
  • clin_oeil.gif
  • confus.gif
  • devil.gif
  • emu.gif
  • eye_up.gif
  • glasses.gif
  • gun.gif
  • hum.gif
  • jet.gif
  • lang_1.gif
  • lang_2.gif
  • larme.gif
  • love.gif
  • mad.gif
  • mdr.gif
  • sad.gif
  • scare.gif
  • sick.gif
  • smile_1.gif
  • smile_2.gif
  • wahou.gif
  • wave.gif
  • xd.gif
  • zip.gif
  • zzz.gif

关于

丁宇(Felix Ding),电脑Geek,狂热的爱书和爱乐分子。现在在Idean做用户体验设计咨询方面的工作。咨询Email: 。注:1)请先自我介绍;2)请确保你先看过“提问的艺术”。

订阅到RSS