Advertisement

我们应该如何编写高质量的前端代码

阅读量:

撰写优秀代码是每个程序员必须掌握的基本技能之一,并能帮助我们在项目中更好地维护并促进团队协作。

在这里插入图片描述

01 前言


始于很久以前,在前端开发的历史长河中

自始至终以来, 代码始终实现了高度分离, 每个模块独立负责其功能, 将结构、样式与行为实现了彻底割裂, 这使得整个系统的功能划分极为明确, 使用起来也异常直观舒适. 因此, 很多前端开发者都会选择对自家网站进行重构, 其实不然的是不想接手上一代项目的累赘, 而是希望用更加简洁优雅的方式重新构建系统.

02 代码维护难点


为什么说前端的代码难以维护呢?其实主要是出于以下的三点:

浏览器层面

我们前端人与浏览器之间有着密切的关联,并非仅仅依靠表面的关系就能维系这份职业的存在感。从本质上讲,在线服务的发展离不开这个基础平台的支持。若无这个平台的支持和推动,在线服务可能难以形成完整的产业链条和商业模式框架。那么问题来了:是否有听说过全息投影技术?当该技术广泛应用时(或普及期),我们的工作内容会发生怎样的变化呢?

如今网页浏览器的兼容性已经逐步提高,在线浏览体验愈发良好。主流网页浏览器通常支持大量CSS属性功能,在这种情况下必须予以支持。值得注意的是常见且被广泛使用的CSS属性必须支持。像flex布局这种堪称‘神属性’的功能确实难以适应其他布局系统的逻辑体系。当一个人长期依赖于某个特定的网页浏览器(例如谷歌浏览器),转而尝试使用其他主流 browsers时就会发现难以适应的状态如同在移动互联网时代...也面临着类似的挑战

前端浏览器之间的兼容问题是我们必须跨越的一道难关。即便当前的兼容性已经有所提升,在线上的用户群体中仍有不少人习惯于使用IE或360等传统浏览器继续操作。可别小看这些老用户群体啊!光是兼容IE就是浪费大好时光,请自己细细品味一番吧。

技术层面

各公司采用的技术各不相同。许多企业普遍拥有自己的独特架构。我们不得不将这些企业特有的架构与现有的系统架构有机融合在一起。这也确实是一项具有挑战性很大的任务。即便是一名新加入团队的员工也必须学会这些企业特有的架构才能参与项目开发工作。

在很多公司的初创阶段,在Vue、React等主流技术尚未出现之前(...),主要依赖jQuery这个框架支撑)。因此,在这些公司中发现新技术的出现往往会导致他们仍然倾向于保持现状(...),直到找到更适合替代方案为止)。这种探索过程往往伴随着持续的技术尝试与优化(...)。当我们在面临需要重构现有代码库时(...),也可能因为员工对新技术的理解还不够深刻(...),而导致设计上的缺陷与不足(...)。这不仅反映出当前团队成员对新技术的理解程度仍有待提升(...),也间接影响着项目的可维护性和长期发展性(...)。

团队合作

团队协作确实是一个巨大的挑战。与我们自行开发的项目不同,在编写过程中编写起来非常自由,并不用担心会出现看不懂的情况。提交代码时,并不需要得到其他成员的认可或授权。然而,在公司层面或项目管理中进行类似的尝试,则只能采取更加极端的态度——那就是直接将现有的成果作为烂摊子处理。

大型项目通常会配备较多的开发人员,在项目的各个阶段中每个人都会有不同的职责分工。每个成员都会承担不同的模块开发以及功能实现,在完成各自的工作后将成果提交至主分支前需经过严格的审核流程。整个流程具有条理性与规范性,并且能够保证项目的顺利推进。随着项目的复杂程度增加,团队协作标准也随之提高。遵循统一的代码规范是团队协作的基础,在日常工作中每个人都必须严格遵守这些规定以避免影响其他成员的工作效率。如果不能做到这一点就可能导致其他成员的工作受到影响进而影响项目的长期维护与稳定发展。团队协作的核心挑战不在于技术层面而在于人与人之间的有效沟通与协调配合。

小结:

除了将项目的代码进行解耦,并将结构、样式与行为分离之外,我们还应该重视简洁性、可重用性和结构化的特点。当您能达到这些方面时,您的项目会显得专业。开发人员添加新的功能或模块时会更加轻松。此外,在这种情况下,代码的可维护性和可扩展性都会更高。

03 高质量结构代码


语义化

随着HTML5的推出,在前端开发中新增了大量功能性的标签和灵活的属性设置。同时,在前端开发者中,“语义化”这一理念逐渐被提出并重视起来。在过去的开发实践中,默认的做法是利用div标签及其名称或id来标识不同的功能模块。这种方法的发展历程可以追溯至早期基于DOM技术的网页定制方案。那么这种方法是否能够被推广开来呢?当然可以推广,并且这种做法已经得到了广泛的认可和应用。具体来说,在实际应用中可能会增加一些额外的操作步骤。

自然存在一些不足之处。例如说,最显著的问题就是整个代码的布局不够合理。无论是创建导航栏、添加功能模块还是底部部分,在整个页面中全部使用div元素。这样做导致整个代码的布局变得混乱。如果没有给予相应的标签名称(如类名或id),就无法确定所写的代码属于哪个功能模块。而且不利于搜索引擎识别网站内容,并且准确识别网站的整体架构

如何判断一段代码是否具有语义化特征?基本步骤如下:首先去除所有样式元素,在浏览器中观察页面结构的显示效果。通常情况下,默认布局设置会包含在标签定义中。如果显示效果良好,并且页面结构清晰有序时,则认为该代码具备较高的语义化水平。若发现有问题,则需要对代码进行重构。

模块化

模块化的实现往往是在语义化的框架下进行的。若你的语义化处理得较为出色,则这通常会带来较为良好的模块化效果。从实践角度来看,在选择标签时需要特别注意其合理性:例如,在处理文字内容时通常采用

标签;而标题部分则应当选用H1至H6级别的标题标记。为了避免将所有文本内容都归为通用容器类(div),应优先考虑采用

来处理那些仅需文字展示的内容。

小结:

如今我们已对这些事物不再给予过多关注。
然而这一情况发生的原因在于出现了外表出众的功能模块库。
尽管如此,
但值得注意的是,
并非如此做就能规避学习的原因。
无论多么高级的功能模块都是基于基础样式与架构构建而成,
而掌握其底层开发思路才是关键所在。
当功能模块无法满足业务需求时,
就 necessitates you to write custom CSS code.

04 高质量样式代码


盒子模型

在很多面试中都会有这样的问题考察候选人对CSS盒模型的理解;对于缺乏充分准备的求职者来说,在回答这类问题时容易出现混淆;以下再次强调:

  • IE:该元素的宽度包括width、border和padding三个部分。
    • 标准:在标准中规定,元素的宽度仅指width这一项,并已将padding和border包含在内。
样式组织

在编写我们页面样式的过程中也是一个需要考虑的问题,在这一过程中‘没有对错’只有‘优劣’之分。如果设计出来的页面能够达到预期效果,则认为这样的样式是合适的;‘是否合理’则是另一个需要关注的重点。

所以这里可以参考一下样式的结构组织:reset.css+common.css+view.css

首先第一个涉及的是基本样式规范, 侧重于基础层面上的所有元素样式统一配置, 以确保所有浏览器呈现的一致性为目标展开工作。在这里,'reset'操作指的是将浏览器默认设置归位, 这种做法虽然看似简单却暗含强大破坏力, 因为它会遍历页面中的每一个元素节点进行重置处理, 可能会对原有设计造成不可预见的影响。为此, 我们强烈推荐参考网上的RESETCSS库作为基础配置文件, 这些资源提供了丰富的选择方案, 对于有需求的朋友可以直接通过npm安装获取该库并进行本地定制配置, 操作简便高效且易于管理

common.css主要用于管理组件相关样式信息,在Vue开发中我们可以知道一个Vue文件通常由三部分构成,在其中一部分中则允许开发者编写专门针对组件的样式代码。当需要重复使用组件时会发现这一功能非常便捷此外(view.css)则是一个更高层次的应用场景配置文件,默认情况下用于管理整个页面的样式配置。

选择器使用

CSS选择器可用于为单个节点设置样式,在实际应用中可能会有同学询问是否只需确保样式成功应用即可无需深入理解其使用方法?其实并非如此,在深入学习之前有必要了解其工作原理。在CSS中,默认情况下选择器遵循从右到左的匹配顺序,在具体实现中例如由$.class、ul、li、a、p等类型的组合式选择器会依次首先尝试全局匹配p元素类型若无对应结果则继续匹配a元素类型以此类推以实现更为复杂的样式定位功能。

首要问题是必须避免选择器的嵌套过于深入,在此情况下可能会导致性能消耗增加。如果一个元素可以通过ID唯一匹配,则无需搭配其他选择器;这也正是由于选择器的这种匹配机制所导致的结果,并且这一原则经过长期验证成为可靠的结果。最终需要注意样式继承的重要性,并尽量避免重复样式代码;少而精地使用组合式样式设计会更加高效,并且多采用继承的方式进行样式设计会显著提升开发效率

近年来出现的新兴CSS预处理器能够显著地提升样式编写的效果。这一技术通过引入面向对象的方法来优化代码结构和可维护性。该技术采用了一种面向对象的设计理念,在很大程度上提高了样式代码的复用性。这些工具包括Stylus、SCSS和LESS等开源库。建议读者访问官方文档以获取详细信息和使用指南。

编码风格

样式风格:CSS编码风格因人而异各有特色,在一般情况下推荐采用分段书写方式以提高可读性。通常建议采用分段的方式书写这有助于提升代码的理解度。如果将样式代码集中编写在一行可能会导致阅读时的不便后期我们将在项目发布阶段对代码进行优化压缩处理。

id/class:通常用于定位全局唯一且不可替代的元素,在这种情况下我们可以放心地应用id选择器;然而当遇到非唯一的场景时则建议优先选用class属性

05 高质量的行为代码


良好习惯

由于项目中有多名开发者协作,每个开发者应独立管理自己的变量以避免潜在的冲突和兼容性问题。为了避免这种全球性操作可能带来的负面影响,请考虑采用模块化设计并限制全局修改的可能性。我们有哪些具体的措施或策略来实现这一目标呢?

  • 团队合作避免冲突

我们将代码嵌入到一个匿名函数中。例如(function(){})()这样的结构就能确保内部变量仅限于该函数范围内,并从而避免对其他外部代码产生影响。通过将代码封装到匿名函数中可以实现对全局变量的有效管理从而避免潜在的冲突隐患。

  • 统一入口

我们可以给函数指定一个固定的入口点来导入文件,并且可以选择将这个入口设置为init参数的位置。这样一来所有的初始化操作都会在这里执行。通过这样做我们可以模拟DOMReady事件并确保在适当的时候触发相关功能。

  • CSS放在头部,JS放在底部

这种操作应当被视为所有人都应遵循的最佳实践, 这将有助于提升浏览器端页面加载效率, 降低无内容显示的时间片长度, 提高用户体验的整体感受.

JS分层

事实上,这里的层次划分与CSS中的层次划分原理一致。具体实现时可以参考base layer、common layer以及view layer的形式。其中base layer可封装不同浏览器之间的差异,并完成一些兼容性工作;而common layer则提供了一系列可复用的组件,这些组件主要为view layer提供必要的功能支持。值得注意的是,尽管common layer和base layer都能为view layer提供组件支持,但二者的侧重点有所不同:common layer能够提供更多种类和规模的组件集合。例如,在实现拖拽功能等交互操作时会大量使用到该层面的支持功能。至于view layer本身,则主要负责调用前两层面的相关组件,并根据具体的页面逻辑需求完成功能实现部分。

实用技巧
  • 弹性

弹性体现在我们能够轻松应对客户需求的变化。避免每次新增需求时都需要修改相关的JS代码。例如借鉴事件代理的技术来实现一些精简的操作。

  • 可复用性

目前普遍我们在实现某个功能时需要考虑如何才能将这些代码进行复用以便降低涉及业务逻辑或功能模块的相关代码量从而达到只需编写一次即可供多个组件使用的目的能够实现跨组件共用而不影响各组件独立性的功能是我们追求的目标具体实施时则可通过参数传递的方式完成

  • 避免副作用

也许我们的基础代码能够基本满足当前需求。
但这种情况下可能会带来一些意想不到的负面效果。
为此需要采取措施。
我们需要评估一下我们的函数模块之间是否存在过高的耦合性。
并采取相应的解耦措施。

06 小结


今天就让我们谈谈编写高质量代码的相关内容。实际上还有很多细节未被涵盖。如果读者有兴趣进一步了解细节,还可以参考相关的技术文档。从代码结构、样式设计以及功能行为三个方面展开说明。这些语言是前端开发的基础工具。

在结构上强调了语义化编写与模块化编写的方法;在样式设计中采用了盒子模型这一核心方案;针对样式的构建以及不同风格的应用,并对选择器的不同应用进行了详细说明;在编写的规范上提出了良好的习惯,并对层次分明的结构进行了详细阐述。

其实具体的实现还需大家自行体会这些经验,并非简单复制粘贴。这些都是前人总结下来的经验,在项目中具体细节的处理上应遵循这些规则,在遵循这些规则的基础上进行编写工作可能会提高代码的质量水平

在这里插入图片描述

全部评论 (0)

还没有任何评论哟~