当开发团队规模逐渐增大,为了更好的代码可读性、可维护性、可扩展性、可复用性和项目安全性等方面的考虑,制定前端规范变得越来越重要。下面是一份常用的前端规范,包括代码风格规范、编码规范、提交代码规范、文件组织规范、文档规范、性能规范、安全规范。
代码风格规范
- 缩进使用 2 个空格。
- 使用驼峰命名法(camelCase)命名变量、函数、方法和对象等。
- 使用 PascalCase(大驼峰命名法)命名类和构造函数。
- 变量、函数、方法和对象等使用有意义的名称。
- 代码块使用大括号(即使只有一行)。
- 代码行长度不超过 100 个字符。
- 避免使用全局变量。
- 避免使用魔术数字(magic numbers)和魔术字符串(magic strings)。
- 使用常量和枚举代替魔术数字和魔术字符串。
- 避免使用单个字母命名变量和函数,除非该变量和函数的作用明显且代码易于理解。
- 注释清晰明了,不需要过多解释代码实现,但要解释实现的思路和原理。
- 代码中不得出现注释标记为 TODO 或 FIXME 等未解决的问题。
编码规范
- 尽量使用 ES6 的语法和特性,如箭头函数、let 和 const 等。
- 使用严格等于(===)代替宽松等于(==)。
- 将 JavaScript 代码放在一个立即调用的函数表达式(IIFE)中,防止变量污染全局作用域。
- 使用常量或 let 变量代替 var。
- 避免使用 eval() 函数。
- 避免使用 with 语句。
- 避免使用 Function 构造函数。
- 避免使用 setTimeout 和 setInterval 等计时器,使用 requestAnimationFrame 或 Promise 替代。
- 避免使用 delete 操作符。
- 避免使用 for-in 循环遍历数组,使用 for-of 或 Array.forEach() 替代。
- 使用 Array.map()、Array.filter()、Array.reduce() 等方法代替 for 循环遍历数组。
- 避免使用 switch 语句,使用对象字面量和多态性代替。
前端提交代码规范
- 代码必须经过测试并且无错误才可以提交;
- 提交前必须先进行代码审查;
- 提交前必须运行
lint工具; - 提交前必须确保代码规范符合团队制定的代码规范;
- 提交前必须确保代码经过压缩和混淆,以减少文件大小并提高加载速度;
- 提交前必须对代码进行版本控制,同时在提交信息中写明修改了哪些文件以及修改了哪些功能。
文件组织规范
- 项目结构应该合理清晰,让开发者能够快速定位代码;
- 各个文件和目录命名应该遵循命名规范;
- 不要将不同类型的文件混在一起,如将CSS文件和JavaScript文件放在同一个目录下;
- 避免将不同功能的代码放在同一个文件中;
- 对于不再使用的文件或者代码,及时删除或注释掉。
文档规范
- 每个文件必须包含文件头信息,包括作者、创建时间、修改时间、描述等;
- 每个函数、方法、变量应该有详细的注释,解释其功能、用法、参数、返回值等;
- 每个模块应该有完整的文档说明,包括模块功能、使用方法、注意事项等;
- 在项目中必须提供完整的使用说明,包括安装、配置、运行等方面。
性能规范
- 对于需要频繁操作的DOM元素,应该先用变量缓存,减少DOM操作次数;
- 对于需要频繁读取的数据,应该先用变量缓存,减少读取次数;
- 尽量使用CSS3动画、过渡等技术,减少使用JavaScript造成的性能损耗;
- 尽量使用事件委托,减少事件绑定次数;
- 对于复杂的计算,应该使用Web Worker进行计算,避免占用主线程造成阻塞。
安全规范
- 在使用第三方库时,必须对其进行安全评估;
- 对于涉及到用户隐私和敏感信息的操作,必须进行严格的权限控制;
- 在处理用户输入时,必须进行数据验证,防止SQL注入、跨站脚本攻击等安全问题;
- 在使用Web Storage、Cookie等本地存储方式时,必须进行加密,防止信息泄露;
- 在使用AJAX请求时,必须使用HTTPS协议,防止信息被劫持。
Less/Sass 开发规范
文件命名规范
- 文件名应该全部小写,使用连字符(
-)分割单词,如:base.less,variables.scss - Less 文件应该以
.less扩展名结尾,Sass 文件应该以.scss或.sass扩展名结尾
变量命名规范
- 变量名应该全部小写,使用连字符(
-)分割单词,如:$primary-color - 变量名应该使用有意义的名称来描述变量的作用,避免使用无意义的名称如
$a,$b
命名空间规范
- 在大型项目中,应该使用命名空间来避免命名冲突
- 命名空间应该使用
namespace-前缀来定义,如:namespace-header,namespace-footer
嵌套规范
- 不要在选择器中嵌套超过 3 层
- 避免使用嵌套选择器来增加样式的优先级,应该使用更明确的选择器
Mixin 规范
- Mixin 名称应该全部小写,使用连字符(
-)分割单词,如:@mixin border-radius - Mixin 应该有明确的作用,并且只应该实现一个功能
- Mixin 中的参数应该有默认值,并且使用命名参数的方式定义
函数规范
- 函数名应该全部小写,使用连字符(
-)分割单词,如:lighten() - 函数应该有明确的作用,并且只应该实现一个功能
- 函数中的参数应该有默认值,并且使用命名参数的方式定义
注释规范
- 注释应该用来解释代码的目的和用法,而不是重复代码本身
- 注释应该位于代码块之前,并且使用
/* ... */或//形式 - 对于较大的代码块,应该在代码块的开始和结束处加上注释来标明起止位置
格式化规范
- 使用 2 或 4 个空格来缩进代码,而不是制表符
- 每个选择器、属性、值之间应该留有空格
- 每个属性应该独占一行,并且以分号结尾
- 大括号应该独占一行,并且位于选择器后面
- 每行代码应该不超过 80 个字符
性能规范
- 避免在循环中使用深度嵌套的选择器
- 避免在循环中使用复杂的 Mixin 或函数
- 避免使用
!important