闵超的主页

《重构》

2018-09-12
闵超

《重构》

什么是重构,为什么要重构?

重构是在不改变程序行为的基础上进行小的改动,是代码逐渐改善的过程,通常也需依赖于一些自动化工具的帮助,重构的目标是移除长年累积下的烂代码,以得到更容易维护、除错以及添加新功能的代码。

重构实际上并不涉及除错,也不增加新功能。重构通常会化繁为简,化难为易,改善代码的第一步是重组代码。

大型网络应用的后端通常是关系型数据库,而前端就是网站。FireFox或IE等浏览器的瘦客户端图形界面(GUI),在商业应用中几乎全部取代了胖客户端。

使用基于HTML、CSS和JavaScript构建的Web应用程序取代文字处理和电子表格软件等传统的桌面程序。总之Web和无处不在的浏览器联手创造了全新的应用,如eBay、Netflix、PayPal、Google Reader和 Google Maps等。

HTML使这些应用程序得以诞生,也让开发更迅速,但是并没与有能降低难度,当然也没有从根本上减小应用程序的复杂性。当代码中新的部分不能完美地契合旧的部分,系统会越来越慢皆因整个结构不合理,黑客游走在新旧部分衔接的裂缝中,暴露了系统的安全性问题。

为何要重构

怎么样才能知道重构的时机呢?

难以辨认的代码

最明显的情形莫过于查看页面的源码就好像在看外星文,大部分编码人员都能意识到它们很难看,整洁的代码总比脏乱的代码更容易维护和更新。显而易见。

自家开发的网站自己都用不了

Web可用性在过去几年逐渐得到改善,但没有到达应有的水平。几乎所有最好的网站都开始更关注受访者而非编写者或者设计者。一些旨在改善可用性的简单改动,比如放大字号和组合表单字段,都能获得丰厚的回报,极大地提高生产力。这对企业内部网站和任何需要销售给客户的站点尤为重要。

缓慢的页面呈现速度

如果一个主流浏览器需要花费数秒时间才能展示你的网站,那么问题就来了,虽然这个问题有些难以判断,因为很多页面载入慢是由于网络拥塞或数据库和HTTP服务器过载导致的。不过就算不能通过修整HTML来解决,这也是问题,但是如果在一个本地文件系统保存的页面也需要花费数秒的显示时间,那就必须考虑通过重构来提升速度了。

不同的浏览器,不同的呈现

网页外观并不总是要求在不同浏览器中保持完全一致,但使用合适浏览器的任何用户都应该能够访问所有内容和功能。如果页面在Safari、Opera、IE或者Firefox中难以辨认或者干脆没法使用,那么问题就来了。通常页面在编写者的浏览器中看起来是没有问题的,但他并不麻烦自己去检查页面在所有使用者的浏览器中是否正确。为保证正确的呈现,应该在所有的主流浏览器中检查页面。

网页需要危险或非标准技术的支持

很多网站都要求开启cookie、JavaScript、Flash、PDF、Java或者其他非HTML的技术,尽管它们都有各自的用途,但被网页滥用了,一般情况下,它们并非像一个大多设计者想象的那样通用和可靠。作为安全警告的常客,用户常被告知要在这个或那个浏览器中关闭它们,以免遭受黑客攻击。

被黑得面目全非

把你从美梦中唤醒的最大原因莫过于网站被人黑得面目全非了,这也会引起所有人的迅速关注,被黑的原因有很多,但最常见的是直接对设计有漏洞的表单处理脚本实施代码注入攻击。

如果是网站外观受损还是幸运的,而应该感谢黑客给你指出了问题所在,但不要抱侥幸心理,严重的入侵会导致私密数据被窃取或关键信息被删除。

搜索排行结果靠后

搜索引擎优化是网站重构的主要驱动力之一。跟图片相比,搜索引擎更看重文本;跟后端文本相比,更看重前端文本。它们理解不了表格布局,也不在意cookie和JavaScript,它们更喜欢独特的标题或者元标签(meta tag)

访问者致信投诉网站失灵

无论如何,不要让问题报告掉进客服的黑洞里,要保证站点用户反馈的问题能直接提交到有能力处理它的人手上。太多的网站使用电子邮箱和联系表单,把开发者和实际用户生硬地隔开了,不要浪费这些免费的测试用户,网站可是花开了很多钱来雇佣QA团队,如果有人自愿帮你测试,一定要珍惜并很好地利用这些机会。

何时重构

应该在什么时候重构呢?在清除和处理过时代码的过程中,何时才算是到了添加新特性的时机?这个问题可能有几个答案,但它们之间并不是互斥的。

重构的第一个时机出现在进行任何重新设计之前。如果你的网站碰到需要重新开发的情况,首要任务是掌控它的内容。此时重构的第一个好处显而易见,你将为新设计的实现创建更牢固的基础。良构、组织良好的页面更容易重新设计样式。

重新设计之前进行重构的第二个好处是,重构过程能够帮助开发者熟悉网站,你将会了解页面位置,它们在网站层次上是如何组合起来的,以及哪些是跨页面的通用元素等。同时,还有可能对重新设计产生前所未有的新想法。别急着去实现,把想法记录下来,(放到问题追踪系统中则更好),在重构完成之后,就可以着手实现了。重构是十分重要的工具,可以帮助网站开发者加速网站的开发,如果他们以前未参与开发这个需要重构的网站,重构的过程会帮助他们了解网站的细节。

半连续式重构,如果碰到一下子难以解决的问题,不要连续两周无动于衷,在这期间,看看还有什么地方是可以重构的。尽量使用敏捷开发的方式,编写小部分,测试小部分,重构小部分。当发现了原来的HTML编写者使用了废弃的元素,应该马上使用CSS取而代之。一连串小的但有效的变化累积起来就会带来巨大的效果。

无论做什么,都不要因追求完美而忽视小的改进。如果眼下的时间足够做一点重构,那就只做一点重构,你的目标是让代码每天都有新变化,这样坚持几个月,你就会拥有可以骄傲地向人夸耀的清晰代码。

重构什么

诸如Java之类的编程语言和诸如HTML之类的标记语言的重构有一个关键的区别。与HTML相比,Java变化相对缓慢,C++的变化很少,C就更不用说了。java增加了大量新特性,但大体上能保持一致性。

然而,HTML和相应的技术在同样的时间内发生了巨大的变化,今天HTML跟1995年的根本不是一码事。新版本不仅剔除了一些关键字,也加入了一些新的关键字,在语法和解析算法上也有所改变。


相似文章

Content

如果喜欢,打个赏,加个好友吧

扫描二维码打赏

扫描二维码打赏