很多年以前,面对上古时代遗留的 HTML 发出的腐臭,我捂住鼻子唉声叹气。刚练熟 web 标准的我,恨不得寝其尸食其肉,把一切推翻重来。但经理说,没有时间浪费在清理这些垃圾上,快给我把新的页面切了!可想而知,我是郁闷的。你也是,别装了,我知道。我常常处于崩溃边缘,作为一个有深度爱心和追求完美(这应该是所有程序员追求的品质)的 web 前端开发者来说,为何不许我为残障者着想,改善一些无障碍性?为何不许我把这些鸟b(读者最好不要连起来念),鸟i, 还有鸟u送上刑场?看着 W3C 校验器显示出的一串又一串的 erorr, 我灰心丧气,横眉冷对经理指,好像丫欠了我几十万块冥币,哦不,人民币……
皆因我不知道“重构”(refactoring)。
或许你第一次看到这个词,会欢呼雀跃,耶,“重构”,网站重构,一切重新再来?很明显,不是。相反,它的过程是逐步的,有时甚至是很微小的。作为一门在编程中的高级技术,重构是指“在不改变代码外在行为的前提下,对代码作出修改,以改进程序的内部结构”(《重构:改善既有代码的设计》,2003,中国电力出版社)。对于 HTML 来说,就是不改变 HTML 所表达意义的基础上,对 HTML 作出修改,以改进 HTML 的内部结构。是不是很简单?
读者都知道 web 标准的意义所在,很明显,重构的目的是改善既有的 HTML,向 web 标准进军。重点在于改善,而不是取代。在很多情况下,取代的代价远比改善大得多。如果才能做到最大化的投入产出比,很明显,答案是重构。
啰嗦这么多,到底怎么重构?特别是 HTML, 怎么重构啊,看着堆垃圾我就头痛,是不?很多公司的网站,我们可以看到,比如腾讯,雅虎的新推出的页面,都是基于 web 标准的了,但还是存在大量的旧页面,就算访问量巨大,也是纹丝不动。我相信,这很大程度上不是由于不想改,而是除了全盘推翻重头再来之外,实在找不到好的解决办法。重构是你的解药,宝贝。
由世界知名的 XML 专家 Elliotte Rusty Harold 所著的 Refactoring HTML: Improving the Design of Existing Web Applications 是你解药的配方。书中大谈特谈的章节不多,就第一章说说who, what, why, when, where,其他章节都是说 how. how, yeah, 就是到底怎么重构的锦囊妙计。书中从编程世界中“窃取”被证明是可行的、成熟的技术,很多可能是 web 标准实践者闻所未闻的技术,结合到 HTML 来,创造行之有效的新技术,解决 HTML 特有的难题。比方说,你关心过 GET 和 POST 是什么吗?知道为何 Google 爬虫爬一爬,很多页面消失殆尽吗?(嗯嗯,老油条们,我知道你知道(绕吧?),我在这里问的是“页面仔”)。关心过自动化测试吗?什么,你还刀耕火种,写一行就在浏览器刷一下看效果?知道怎么样批量校验你的页面吗?不要告诉我你一页又一页的把上千个页面轮番轰炸 W3C Validator…
不知道?那怎么还浪费时间看什么书评,赶紧的打开书来看啊!噢哦,没有书?google 一下,有得下。英文看不懂?很吃力?噢哦,明年中文版就会上市,嗯嗯,译者就是我……(终于露出狰狞面目)……
本书是探讨 HTML 领域的重构,是对重构这门技术的又一创造性运行。它从工具入手(我们知道,工具是重构的重要辅助),然后逐一分析良构(well-formness)、合法性、布局、无障碍、web 应用程序和内容等等需要重构的方面,提出问题,讨论理据(motivation)并提供行之有效的解决方案(mechanics)。对于接触 web 标准较少的人来说,提供了一个百科全书式的的参考,而对于我的同行们,sure, 亲爱的页面仔们,不仅可以查漏补缺,亦可学习程序工业中的先进经验,提升自己的“工业”素养。总之,这不是一本束之高阁的书。
编写 HTML 不仅是一门技术,更是一门艺术。你会了解的,在读了本书之后。在此我很严肃地说。仅以此献给中国所有的页面仔,共勉。
May 27th, 2008
by arthuridea
看完推荐,想看了。。。
时刻绷紧神经充电。。。哈哈~
May 27th, 2008
by JunChen
安安的文章写的越来越有外国作者写作的味道了
May 27th, 2008
by soni
重构?很新鲜!
May 27th, 2008
by smoke520
明年几月啊?我想第一时间买一本看看。关注了~!
May 27th, 2008
by Jason Lee
开头一段太有意思了。借我两张10W的冥币
May 27th, 2008
by PeriCHR
共勉……共勉……共勉……共勉……共勉……共勉……共勉……(回声无限……)
May 27th, 2008
by realazy
The Author
@JunChen 哎呀呀,看我的中文用得这么炉火纯青,竟然说有“外国”的味道,那我岂不是很伤心?呵呵,开个玩笑。
May 27th, 2008
by Amer
真好玩呐~~~ ^_^小安写东西越来越幽默啦~~
May 27th, 2008
by BigBen
拒绝网站重构很大一部分意见来自于相对于传统(杂乱无章)的HTML,DIV+CSS没有绝对的优势,或者说标准支持者没有把这种优势发挥到最好。重构需要更强大的平台跨越能力和更多性能的提升,这是一些重构新手不具备的。
May 27th, 2008
by sv
原来WUID的中文翻译是“页面仔”呀 囧rz 感谢推荐
不过搜了下 网上没有pdf的 只有chm 看着不爽
May 27th, 2008
by dexbol
可能是最幽默的一篇日志。
May 27th, 2008
by x5
呵呵,我也纳闷呢,怎么突然写上书评了,当看到这儿时──“译者就是我”──便暗喜“果然不出我所料”
BTW,明年出的书,今年就开始做宣传了?有点儿小早啊~
May 28th, 2008
by 大猫
偶看到W3C校验器就会发麻。。。大侠赶紧啦,再不来菜就凉了
May 28th, 2008
by Robin
你够狠呀,直接把我们胃口一吊就是大半年。哎~
May 29th, 2008
by JunChen
@realazy 老外写作时通常会加很多个人偏好的例子,比如《网站重构》一书中有形容简洁的代码为“80年代的贝斯那样灵动”(鬼知道80年代的贝斯是什么声音)……然后在第一版译文中被翻译成了“仅仅80行代码”……
May 29th, 2008
by Fwolf
建议保存此文章,然后等你当经理的时候再回来看看
各自都有难念的经。
May 31st, 2008
by cnscorpio
重构是永远的疼,的确是循序渐进的。有时将某些样式提出来,就能大大改善冗余问题,有时候将一个不必要的外层标签去掉,而改用一句样式控制,会让你觉得很惬意。。。。
May 31st, 2008
by MarVell
果然…都被吊起胃口了…
这一招还是很有效果嘛….
作为《网站重构》的进介篇?
June 5th, 2008
by 则名
恩,对于web标准来说,路还很长。借鉴程序工业中的经验和技巧确实能为我们web前端开发来说启发很多,另,我推荐有兴趣的可以看《代码大全》第二版,其中有很多章节也适合我们“页面仔”看,尤其是职业目标是web前端架构师的同学们。:)
June 6th, 2008
by Yuancheng
我是来赞模板的
June 7th, 2008
by dahai
在68design上面无意中看见了您的BLOG,看您是XHTML+CSS布局高手。以后有什么问题能请教不?
June 10th, 2008
by Firede
又要翻译新书了呀?realazy真勤快
上本精通JavaScript还没啃透呢。
June 10th, 2008
by 小胖
一不小心看到书评,胃口被吊起……
期待中文版出版了
June 17th, 2008
by gelei
太搞了!!!
June 19th, 2008
by 叶闪
你的这个blog界面……华丽且难看
June 19th, 2008
by xiefei
前端开发是一门艺术…真正掌握的人很少…要潜心研究
July 11th, 2008
by Wind
唉,现在商业气息严重,能潜心修炼WEB标准化的人不多啊……
July 16th, 2008
by 哉崽
“页面仔”哈哈,这个名称有意思…
July 28th, 2008
by 爆牙齿
咋还是那么伤感呢?
October 4th, 2008
by yskin
哦,译者就是你啊?
要不要考虑先放出前几章的PDF来看下?
December 19th, 2008
by 晴天
看到 这里非常激动,虽然我不是什么前端人员,但作为用户,依然很关注WEB标准。