本文目录
[[toc]]
前端组件规范
核心原则
- 单一职责: 组件职责单一且明确。
- 数据驱动: 对于组件的控制优先使用数据驱动,实在难以使用数据控制的再考虑使用 ref 调用组件方法。
- 组件颗粒度: 代码量一般在 300 行内,超过 500 行需要考虑拆分逻辑或者重构。
组件设计原则
组件分类
- 基础组件: 无外部依赖,如:纯样式组件
- 复合组件: 组合基础组件,含简单交互逻辑,如:表单组合/表格分页
- 业务组件: 绑定特定业务场景,可含状态管理,如: 订单流程/用户信息卡片等
组件通信
- Props 传递: 优先使用 props 进行父子组件通信
- 事件通信: 使用事件机制进行组件间通信
- 状态管理: 复杂状态使用状态管理工具(如 Redux、Vuex)
- Context: 跨层级组件通信使用 Context
组件复用
- 抽象公共逻辑: 将可复用的逻辑抽离为 hooks 或工具函数
- 组件封装: 将通用 UI 封装为基础组件
- 避免重复代码: 使用高阶组件或组合式 API 复用逻辑
命名规范
文件命名
- 组件文件使用 PascalCase(如
UserProfile.vue) - 工具类文件使用 camelCase(如
formatDate.ts) - 样式文件与组件同名(如
UserProfile.less)
组件命名
- 组件名使用 PascalCase
- 基础组件以特定前缀开头(如
BaseButton、BaseInput) - 业务组件以功能命名(如
UserList、OrderForm)
变量命名
- 变量使用 camelCase
- 常量使用 UPPER_SNAKE_CASE
- 布尔类型变量以 is、has、can 等开头
样式规范
CSS 命名
- 使用 BEM 命名规范
- 避免样式污染,默认使用 scoped
样式组织
- 按组件划分样式文件
- 提取公共样式
- 使用 CSS 变量管理主题
性能优化
渲染优化
- 避免不必要的重渲染
- 使用虚拟列表处理长列表
加载优化
- 组件懒加载
- 资源预加载
- 合理使用 Suspense
测试规范
测试类型
- 单元测试:测试组件逻辑
测试原则
- 测试关键业务逻辑
- 保持测试代码简洁
- 定期更新测试用例
技术规划
五看
- 看行业/趋势: 研究所在行业的整体发展趋势、技术进步、政策法规变化等。
- 看对手/竞争: 分析当前市场竞争格局、竞争对手的优势和弱点,以及合作的可能性。看你行业里面最牛逼的那几家,学习别人的好处,看清别人的未来,对标学习。
- 看市场/客户: 深入理解市场需求、消费者行为、细分市场机会及潜在客户需求的变化。 客户是谁? 客户买什么? 需求是什么?
- 看自身: 评估公司自身的资源能力、核心竞争力、组织架构、企业文化等方面的优势和不足。
- 看机会: 识别新的商业机会、蓝海市场或技术创新带来的战略机遇。
三定
- 定策略: 根据"五看"的结果,明确企业在特定时期内的业务策略,包括产品定位、市场定位、差异化策略等。
- 定战略: 在深入了解内外部环境的基础上,制定中长期发展战略,包括但不限于目标市场选择、增长路径设计、商业模式创新等。
- 定规划: 将战略转化为具体的执行计划和行动方案,设定短期、中期和长期的目标,制定实施步骤和资源配置计划。
根因分析法( Root Cause Analysis, RCA )
根因分析法是一种用于深入探索问题本质原因的系统化方法,广泛应用于质量管理、项目管理及事故调查等多个领域。其核心目标是找到问题的根本原因,并采取有效措施防止问题再次发生。
分析步骤如下:
- 定义问题: 明确阐述问题的具体内容,包括问题发生的时间、地点、影响范围及其严重程度等关键信息。
- 数据收集与信息整理: 通过观察、记录、访谈、查阅文件等多种途径获取与问题相关的一切数据和事实。
- 原因层次分析:
- 直接原因分析: 识别导致问题直接发生的表面原因。
- 根本原因分析: 进一步挖掘深层次的原因,这可能涉及组织文化、政策、流程、人员技能、设备工具等方面。
- 运用分析工具: 常见工具有以下几种
- 5W1H 分析法(What、Where、When、Who、Why、How)
- 鱼骨图(Cause and Effect Diagram / Fishbone Diagram)
- 连续五次追问为什么的"五个为什么"(Five Whys)以及逻辑树分析(Logic Tree)
- 验证根本原因: 确认所找的根本原因是否准确可靠,可通过复现问题场景或查找其他证据进行验证。
- 制定解决方案: 针对识别出的根本原因制定相应的改进措施,确保这些措施能够从源头上解决问题,而不仅仅是处理表面现象。
- 实施与跟踪: 执行改进措施,并持续监控效果,以验证措施是否有效防止了问题的重复出现,必要时调整优化方案。
- 持续改进: 将根因分析的结果作为组织学习与改进过程的一部分,推动整体业务性能和质量的持续提升。
SWOT 分析
优劣危机
- 优: 内部优势
- 劣: 内部劣势
- 危: 外部危险
- 机: 外部机遇
用停御成
- 用: 善用优势
- 停: 停缓劣势
- 御: 抵御危险
- 成: 成就机遇
前端质量保障方案
三层四面
| 事前(开发阶段) | 事中(集成阶段) | 事后(线上阶段) | |
|---|---|---|---|
| 基建 |
|
|
|
| 测试 |
|
|
|
| 风控 |
|
| |
| 管理 |
|
|
|
开发阶段
测试服务
测试作为质量保障的基础手段,其效率和准确性在很大程度上依赖于完善的测试环境、强大的测试工具以及高效的测试服务。
- 对于兼容性测试: 先进的工具可实现一键模拟多台设备渲染页面,并通过截图比对自动生成报告,显著提高问题定位速度,如能自动标识出存在问题的机型,则极大地 简化了兼容性问题的发现过程。
- 自动化测试方面: 便捷的脚本录制功能使得非程序员也能快速创建自动化测试用例,无需手动编写代码来驱动测试流程。这种特性如网易 Airtest 等工具所具备的,可以极大 提升回归测试的覆盖面和执行效率 , 减轻人工测试负担,确保产品质量得到持续有效的验证。
技术架构标准化
技术架构标准化是基于最佳实践的原则,其核心目标在于提升开发效率和保障开发质量。关键机制:
- 预防与消除潜在问题: 技术架构标准化通过对设计的硬性约束,能够有效防止或减少因人为错误导致的故障隐患,通过 预先设定的技术规范和框架约束 ,使得开发者在遵循标准的过程中降低出错概率。
- 复杂度控制: 面对需求不断增长和技术规模扩大带来的复杂度挑战,技术架构标准化通过 采用框架 、 组件化 以及
MVVM等架构模式来分解和简化系统结构,从而有效地管理并降低实现层面的复杂度。 - 团队协作优化: 通过 约束开发模式、统一团队开发风格 ,技术架构标准化有助于保持代码的一致性和可维护性,避免个人风格差异造成的额外复杂度,促进团队成员之间的高效协同工作,进一步提升整体项目的质量和稳定性。
外部依赖质量管理
通用的依赖一般来说有:CDN、网络、容器、接口、基础框架/库、sdk(埋点、监控之类的)、打包工具等等。关键要形成两点判断:
依赖是否可靠: 比如出问题了能否找到维护方、核心的依赖如果崩溃有没有降级兜底方案等
依赖是否彻底解耦: 比如某些配置不应该跨项目或者跨团队存在,否则一定会相互中伤
- CDN: 主要问题是节点故障
- 网络: 主要问题是劫持,资源被劫持后,响应没有带跨域 Access-Control-Allow-Origin: *这个头,就会导致资源因跨域而被浏览器拒绝执行,页面就挂了
- 容器: Webview 可能出现各种问题
- 接口: 接口异常监控,还需要考虑对接口的调用量进行监控
- 基础框架/库: 原则上需要锁定版本,不要完全指望开发者遵循 semver 版本语义,任何变动都可能产生故障。
- sdk: 引入的 sdk 也是可能出问题的。像监控类的 sdk 必须先加载,且必须是同步加载,可考虑内联,避免网络加载失败
- 打包工具: 检测 es6 代码,检测循环引用,检测重复包等
日志
- 需要记日志场景: 统计某个指标、排查问题、监控异常
- 需要记日志的地方: 主动监控(接口、业务异常等),被动监控(网络/资源时延与成功率、页面性能、js error)
技术方案
技术方案都是后端主导,毕竟业务逻辑主要在后端,前端只是负责展示,而且后端涉及库表、缓存、接口、系统调用关系、逻辑流等,很容易画出一堆图来讲,前端要是没个明确指南,技术方案往往不知道写啥
技术方案主要目的有三个:
- 提前想清楚关键问题: 比如:影响范围、依赖资源、数据来源、核心逻辑、接口方案、兜底方案、监控方案、测试方案、上线方案
- 排期的依据: 大型需求只有经过拆解才可能给出准确排期
- 同行把关: 从团队管理角度,一般在各个细分领域有至少主备两人(或多人)专门负责。评审时视情况将相关的负责人拉进来,协助扫雷
SOP
SOP (标准操作程序)是一种流程标准化的行动指南, SOP 应该达到的标准是任何新人看着文档就能一步步完成整个操作
需求管理
需求管理可以做的事情包括:
- 质疑必要性、合理性: 凡事先想为什么。无明确收益或收益不可衡量的拍脑袋式的需求,拒绝执行或优先级往后排(有些事拖一拖往往有转变)
- 大需求、探索性需求可考虑分期开展
- 明确要做的事情: 符合问题与目标所定义的范畴
- 需求变更不能轻易接受: 哪怕是需要接受的合理变更,也应该给需求方施加一点压力
- 对产品本人需要有判断: 比如刚加入团队,又提比较大的需求,大概率会出现较多的需求变更
集成阶段
分支管理
- 禁止本地直接 push master,禁止远程直接修改 master
- 合并 master 强制走 pr,必须有 approve 才能合并
- 锁定线上环境发布的分支,避免其他分支因误操作被发上线
封禁期 / 灰度 / 渐进式
- 封禁期是一种风控手段,避免节假日上线,除了可能因用户量增加放大故障的后果,还有就是避免因休假无人修 bug
- 灰度发布主要是避免一次性上线,导致潜在故障也跟着瞬间全量
- 渐进式是一种基础理念,不仅体现在发布过程,也体现在日常做事中
Code Review
需要 Review 的内容:
- 代码质量(前置校验、边界条件、复用、技术实现、加日志…)
- 代码可读性(指出看不懂的地方、改命名、加注释…)
- 发现问题(技术实现的问题、业务逻辑的问题…)
线上阶段
监控
监控系统的责任,是尽快发现问题。
- 根据监控的手段
- 被动监控: window.onerror 被动监听
- 主动监控: try catch 主动上报
- 根据监控的对象
- 体验监控
- js 报错监控
- 供应链监控
参考资料:
备份、降级、开关
各个重点功能都必须考虑备份方案,出问题了可自动降级,或通过开关控制,关闭入口
故障管理
- 明确问题
- 及时止损
- 定位原因
- 复盘总结