前端规范

394 阅读6分钟

当开发团队规模逐渐增大,为了更好的代码可读性、可维护性、可扩展性、可复用性和项目安全性等方面的考虑,制定前端规范变得越来越重要。下面是一份常用的前端规范,包括代码风格规范、编码规范、提交代码规范、文件组织规范、文档规范、性能规范、安全规范。

代码风格规范

  • 缩进使用 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.lessvariables.scss
  • Less 文件应该以 .less 扩展名结尾,Sass 文件应该以 .scss 或 .sass 扩展名结尾

变量命名规范

  • 变量名应该全部小写,使用连字符(-)分割单词,如:$primary-color
  • 变量名应该使用有意义的名称来描述变量的作用,避免使用无意义的名称如 $a$b

命名空间规范

  • 在大型项目中,应该使用命名空间来避免命名冲突
  • 命名空间应该使用 namespace- 前缀来定义,如:namespace-headernamespace-footer

嵌套规范

  • 不要在选择器中嵌套超过 3 层
  • 避免使用嵌套选择器来增加样式的优先级,应该使用更明确的选择器

Mixin 规范

  • Mixin 名称应该全部小写,使用连字符(-)分割单词,如:@mixin border-radius
  • Mixin 应该有明确的作用,并且只应该实现一个功能
  • Mixin 中的参数应该有默认值,并且使用命名参数的方式定义

函数规范

  • 函数名应该全部小写,使用连字符(-)分割单词,如:lighten()
  • 函数应该有明确的作用,并且只应该实现一个功能
  • 函数中的参数应该有默认值,并且使用命名参数的方式定义

注释规范

  • 注释应该用来解释代码的目的和用法,而不是重复代码本身
  • 注释应该位于代码块之前,并且使用 /* ... */ 或 // 形式
  • 对于较大的代码块,应该在代码块的开始和结束处加上注释来标明起止位置

格式化规范

  • 使用 2 或 4 个空格来缩进代码,而不是制表符
  • 每个选择器、属性、值之间应该留有空格
  • 每个属性应该独占一行,并且以分号结尾
  • 大括号应该独占一行,并且位于选择器后面
  • 每行代码应该不超过 80 个字符

性能规范

  • 避免在循环中使用深度嵌套的选择器
  • 避免在循环中使用复杂的 Mixin 或函数
  • 避免使用 !important