程序员玛丽的星海方舟

对一些团队前端开发规范的质疑、求证和思考总结

因为我算是比较重视代码质量的一个人,在刚进公司的时候就开始积极地学习团队内的一些开发规范。其中有写在文档里面的,也有同事们在代码审查中提到的;有美观性、易读性方面的,也有性能提升方面的。有时,看到一些开发规范,我无法理解它的意义和必要性,并且觉得非常不方便,便会在网络上寻找相关的资料,以及与同事交流。当然,作为一名前端新人,我个人的考虑其实也有很多不足之处,以下就介绍一下我对一些团队前端开发规范产生的质疑、求证和思考总结。


定义样式时使用class,避免使用id

这一点,我一开始不知道有什么意义,在深入了解过后觉得是必要的。

首先这两个属性存在明显的不同:class属性是专为样式准备的,并且可复用;id属性具有当前文档内的唯一性,通常能够起到特殊的作用,比如作为<a>标签的锚点,以及最快地被JavaScript元素节点语法选中。

因此,id属性通常作为一种具有特殊性的标识,表示本元素可能用作页面锚点,或者代码中需要对该元素执行JavaScript操作。除此之外,不在非必要的时候使用id属性也可以减少出现意外重复的概率。

总之,使用CSS选择器的时候,如果该本身就需要使用id进行其他操作,就可以使用id选择器,否则尽量不要仅为了定义样式而使用id.


少使用标签选择器

从开发者的角度来说,其实使用标签选择器是很方便的。譬如某个div元素中只存在一个img标签,使用[.certain-div img]的选择器就可以最快地选中该img元素。

但从性能的方面考虑,使用标签选择器可能会带来一些性能影响。CSS选择器的层次逻辑是从右到左执行的,因此越往右边的选择器越影响效率。而标签选择器通常放在较右边,这就使得CSS先选中文档中所有的该标签,再执行上一步的层次查找。标签往往在文档中相比class和id是最多的,因此会影响CSS选择器的效率。

当然,如果本身就是在文档中比较少使用的标签,自然不会非常影响效率,但div, span等使用频率较高的标签,可以想象对性能影响还是比较大的。

总的来说,定义样式的时候,如果能使用class,尽量还是避免使用标签选择器。


Vue框架中v-for列表渲染的key属性是否能使用index

key属性,是在Vue列表渲染时,被用于唯一标识每一列表项的属性。在列表渲染的机制中起到非常重要的作用。

首先,在比较简单且静态的列表结构里面,使用index作为key, 或者不使用key, 其实是能够通过依赖默认行为提高性能的。

但是,以下几种情况无法使用index作为key:

  1. 该列表可能出现顺序变化。譬如需要提供向列表中间插入项的功能,这时会把顺序打乱,原本的标识作用也将产生混乱。这种情况,建议在列表结构中,给每一项增加一个单独的识别码,譬如:
1
2
3
4
5
6
7
8
9
[
{
id: 'hello1',
name: 'Hello'
}, {
id: 'hello2',
name: 'Hello'
}
]
  1. 两个及以上的列表渲染作为兄弟节点出现。
1
2
3
4
<div>
<div v-for="(item, index) in array" :key="index"></div>
<div v-for="(item1, index1) in array1" :key="index1"></div>
</div>

因为key的作用范围是同一元素下,这种条件下就可能会出现key重复的情况。解决方式是把index和一些字符拼接起来,就可以把两种key区分开。这种方式生成的key实际上也是和index完全相对应的。如下:

1
2
3
4
<div>
<div v-for="(item, index) in array" :key="`a${index}`"></div>
<div v-for="(item1, index1) in array1" :key="`b${index1}`"></div>
</div>

跟前辈讨论的时候,她认为为了避免key重复的情况,应该完全不使用index作为key, 尽量拼接字符串。我其实觉得,这种情况在使用简单静态列表的场景下很少出现,只要心里有数就可以用。


注释

没人爱写注释,我也不爱。听过一种说法,一个条理清晰、命名意义明确、排版舒适的代码胜过各种注释,因此我也一直很努力地在做到,为了不写注释。

当然,有些注释还是可以一写,大多方便别人,部分方便自己:

  1. 公用的方法、变量、组件等。方法的注释推荐使用VSCode拓展koroFileHeader生成模板。如有需要,变量、组件参数建议说明取值范围。

  2. 文件头注释。也可以使用koroFileHeader生成模板,主要是介绍一下该文件负责的功能。

  3. 确实复杂,不易看懂的代码部分。如果发现某一段代码可能让未来的自己或别人看不懂,及时写注释。