在编写代码时,我们会不断做出决定,并在最初看起来似乎是等效的解决方案之间进行选择。 后来通常会发现, 某些选择会导致程序效率更高 ,因此自然会出现对最佳编码实践和优化技术的追求,我们开始将整个开发过程视为要解决的优化问题 。
尽管优化问题不是开发人员经常处理的唯一问题 ,例如决策问题和搜索问题 ,但优化是可能涵盖了Web开发不同阶段的任务。
代码优化可以在不同的级别上进行,具体取决于我们执行的优化与机器代码的接近程度。 在Web开发中,我们只能执行更高级别的优化 ,因为程序集或运行时级别的优化不是我们的选择,但我们仍然有很多机会。
通过利用最佳编码实践和适当的工具,我们可以在架构级别使用智能设计模式在源代码级别上优化代码,并且还可以通过在工作流程中引入编码风格指南来提高团队的性能。
无论我们选择采用哪种技术,都有一条经验法则,每一项代码优化工作都需要遵循:我们始终必须以不改变代码含义的方式进行优化 。
代码优化的好处随着我们项目的增长而增长,而且即使最初很小的项目也会随着时间的推移而变大,因此获得扎实的代码优化技能几乎总是可以得到积极的结果。
1.更清洁的代码库
随着项目的成熟, 越来越多的开发人员开始从事该项目 ,通常早晚会出现重复和重叠,突然间我们意识到我们几乎不了解正在发生的事情。
牢记DRY(不要重复自己)原则是有效软件开发的基础之一,这并非偶然。 一个经过精心组织,精心优化的代码库,使我们能够多次重用相同的元素,总是比较整洁,因此更易于理解和使用。
2.更高的一致性
一致性就像家务劳动,当适当照顾它时,没人注意到它,但是当它被忽视时,整个地方看起来很乱,我们陷入混乱。
实现完全一致性是很困难的,因为确保向后兼容性最终会阻碍改进 ,但是注意使用一致的代码准则,兼容的API和一致的标准肯定可以减轻痛苦。
3.更快的站点
优化代码类似于购买更快的汽车。 结果,我们的代码执行速度更快 ,并且我们的站点或应用程序比以前消耗更少的内存 。 尽管优化过程可能需要额外的时间和金钱 ,但结果是更好的体验 ,不仅对于开发人员而言,对于最终用户也是如此。
更快的代码也需要更短的页面加载时间 ,这在搜索引擎优化和转化营销这两个领域都意义重大。 研究表明:“将近一半的Web用户期望网站在2秒或更短的时间内加载,而他们倾向于放弃3秒内未加载的网站”,因此速度显然不是我们可以放心忽略的领域。
4.更好的代码可读性
可读性是代码可维护性的重要方面。 具有临时格式的不整洁的代码很难阅读,因此很难理解,特别是对于刚接触项目的开发人员而言。
如果我们应用某些代码优化技术,例如:,我们可以避免处理难以理解的代码带来的痛苦。
- 使用具有有意义名称的连贯命名约定,例如BEM
- 逻辑上使用缩进,空格和垂直间距的一致格式
- 避免不必要的噪音,例如不言自明的明显评论
这就是为什么大型项目(例如WordPress , jQuery和Mootools )具有清晰的编码样式指南的原因,每个开发人员都需要遵循该指南。
5.更有效的重构
在Web开发中经常发生这种情况,即我们从其他人那里继承代码,并Swift了解到,无论从结构,性能还是可维护性方面来看,它都不是最优的 。 当我们缺乏编程经验时,我们以前编写的项目也会发生同样的事情。
在其他情况下,原本不错的项目的目标会随着时间而变化 ,因此我们需要比以前优先处理应用程序中的其他内容 。
我们谈论的是在更改(清理)现有代码时进行重构,以便在不更改其任何功能的情况下对其进行优化。 重构需要格外小心,就好像它以错误的方式完成一样,我们很容易最终获得比原始代码最佳的代码库。
幸运的是,我们手上有许多经过测试的技术,可以使重构过程顺利进行。
6.更直接的调试
调试占用了Web开发工作流的很大一部分,通常是一项乏味甚至艰巨的任务。 如果我们必须调试自己的代码,这已经很困难了,但是当我们需要找到别人的bug时,情况就更糟了 ,尤其是在像永无休止的意大利面条式代码中,仅使用函数的情况下。
7.改进的工作流程
许多Web开发项目都是由分布式团队(例如开源社区或远程团队)运行的。 管理这种工作流程中最困难的事情之一就是找到一种使沟通足够有效的方法,以使团队成员能够轻松地相互理解 ,而不必经常讨论默认值 。
商定的最佳实践和样式指南可以弥合来自不同背景的人们之间的鸿沟,更不用说大多数Web项目中设计和开发团队之间通常的沟通困难 。
代码优化也是工作流优化 ,就像团队成员说一种通用语言并拥有相同的既定目标一样,他们也将能够一起工作,而不必担心太多麻烦。
8.简化代码维护
尽管从头开始构建一些东西比维护已有的代码更有趣,但是有时我们仍然需要执行正在进行的代码维护。 与现有系统一起使用还可以为我们提供有关代码优化的新视图,因为与新项目中的早期优化相比,这是不同的体验。
在软件维护中,我们已经处在一个阶段,可以捕获实际的性能和效率问题,并与实际用户合作,而不是假设的用例。
代码维护通常在开发人员圈子中很少受到尊重,但是如果我们遵循最佳实践,例如使用可靠的版本控制,依赖项管理,登台和测试平台,并妥善保管文档 ,这仍然是一项有意义的任务 。
9.更快的功能开发
不断创新是保持与我们领域相关性的核心,就好像我们一段时间以来没有向用户展示任何新东西一样,我们很快就会被抛在后面。 如果我们使用经过优化的,干净的代码库,则扩展项目并为其添加新功能通常会更快。
除了已经讨论过的代码优化方法外,如果我们紧跟现代项目管理方法 ,例如使用迭代生命周期模型而不是传统的瀑布模型 ,功能开发也将获得动力。
10.较小的技术债务
“ 技术债务 ”一词是由沃德·坎宁安 ( Ward Cunningham )提出的,他也是开发第一个Wiki的程序员。 它比较了我们随着时间的推移积累的错误编程决策的后果,以及人们为了对现在的钱进行快速赚钱而在未来付出利息的金融债务。
这些不尽人意的决定通常以快速修复,复制和粘贴编程,硬编码,不拘一格编程以及其他编码反模式和草率的工作习惯的形式表现出来。
从根本上讲 , 完全避免技术债务是不可能的 ,因为即使将来做出好的决定也可能是不太希望得到的结果,但是如果我们认真地优化代码,我们肯定会背负更小的技术债务 。
翻译自: https://www.hongkiat.com/blog/code-optimisation-why-you-need-it/