10月阅读周·编写可测试的JavaScript代码:复杂度之重用篇
背景
去年下半年,我在微信书架里加入了许多技术书籍,各种类别的都有,断断续续的读了一部分。
没有计划的阅读,收效甚微。
新年伊始,我准备尝试一下其他方式,比如阅读周。每月抽出1~2个非连续周,完整阅读一本书籍。
这个“玩法”虽然常见且板正,但是有效,已经坚持阅读九个月。
已读完书籍:《架构简洁之道》、《深入浅出的Node.js》、《你不知道的JavaScript(上卷)》、《你不知道的JavaScript(中卷)》、《你不知道的JavaScript(下卷)》、《数据结构与算法JavaScript描述》、《WebKit技术内幕》、《前端架构:从入门到微前端》、《秒懂算法:用常识解读数据结构与算法》、《JavaScript权威指南》、《JavaScript异步编程设计快速响应的网络应用》。
当前阅读周书籍:《编写可测试的JavaScript代码》。
重用
减少代码大小的最好办法是减少编写的代码量。其理论是使用其他人维护的可用于生产环境的第三方(外部或内部)代码,这样就可以减少一大笔代码维护成本。几乎每个人都在自己的程序中使用了第三方代码,开源的或者是不开源的。Jeffrey Poulin在劳拉联邦系统(Loral Federal Systems)任职时预估到,程序中85%的代码都不是程序特定的代码,只有15%的代码是独有的。他在1995年的论文中提到:典型的应用程序由20%的通用组件和高达65%的与具体领域有关的可重用组件构成。而程序的其余部分则是由具体应用系统相关的定制化代码和一些地方所使用到的实用程序构成。
他阐述了软件的三个种类:程序特定(application-specific)、领域特定(domain-specific)、领域独立(domain-independent)。
对于JavaScript来说,领域独立代码相当于YUI这样的框架,或服务器端上的Node.js,领域特定软件包括在程序里使用的第三方模块,而我们编写的则是程序特定的代码。
客户端JavaScript可以在很多平台(操作系统和浏览器组合)上运行,任何Web程序要试图解释这一点都是非常难的。几乎在任何场景中,使用一个良好的JavaScript框架都是绝对必须的。像YUI、Closure、jQuery这样的框架处理大量的通用代码,使得程序特定的代码可以在多种平台上运行。框架提供了门面,用于在跨浏览器间提供一个一致的接口。框架还提供了实用工具、插件(plug-in)和附加件(add-on),能够降低代码量。在服务器端,Node.js使用Node包管理器(Node Package Manager,又名npm)工具,利用模块上传到npm注册库),以便处理大量的通用任务。
编写JavaScript的一个非常基本且非常重要的部分是:使用事件(event)进行处理,比如,我们很快就可以看到非重用代码的风险。因为浏览器UI的关系,事件是客户端JavaScript的关键,而Node.js也大量使用了事件和事件回调。然而,JavaScript语言规范本身并没有处理事件的相关内容,这些决策是留给浏览器开发商来定的,开发商之间也会展开激烈的竞争。意料之中的是,在万维网联盟(W3C)介入并尝试标准化客户端JavaScript事件之前,这将会造成分裂。让人感到痛苦的是不得不在每个浏览器上处理事件注册和处理程序之间的差异,这个过程非常容易出错。使用JavaScript框架可以免费解决这些浏览器兼容问题。浏览器(特别是IE 9之前的版本)支持ECMAScript5标准的程度有所不同,所以我们所喜欢的语言新特性可能不会大量出现在运行环境中。不要认为只可以支持一个特定浏览器,我们是可以支持几乎所有现代浏览器的,方案还是免费使用第三方框架。
Node.js也有越来越多的第三方模块,可以通过npm使用。快速浏览npm注册库,可以看到大量可用的模块。当然,模块的质量良莠不齐,但最起码,我们可以查看别人已经解决的类似问题(或者是不一样的问题),以便上手。
除了基本的JavaScript框架外,还有大量的组件可用。使用前辈留下来的精华、避免重复造车是我们的责任。专注于可以让程序显得独特的15%的代码,并使用第三方库,摆脱繁重的工作。
总结
与重用别人的代码相比,同样重要的是重用自己的代码。在“扇入”部分中,我们将讨论如何发现代码没有被正确重用(第8章会继续讨论,届时会提到dupfind工具)。一般的经验法则是:如果发现代码被编写了两遍,那就是时候将其提取到函数中了。不管为了共享代码要花费多少“额外”的时间,都是为了要在将来获得回报。相同的代码如果出现了两次,那么出现第三次、第四次等就只是个时间的问题。警惕重复代码,不要偷懒“就这一次”。一如既往地预防为主、治疗为辅,特别是在调试软件的时候。
作者介绍
非职业「传道授业解惑」的开发者叶一一。
《趣学前端》、《CSS畅想》等系列作者。华夏美食、国漫、古风重度爱好者,刑侦、无限流小说初级玩家。
如果看完文章有所收获,欢迎点赞👍 | 收藏⭐️ | 留言📝。
- 点赞
- 收藏
- 关注作者
评论(0)