前端架构师从0 到1项目总结

297 阅读8分钟

1:前端框架选择

业务适用性:(需要充分理解业务,用户需求,当下需要解决的首要问题,后面的风险。目标分解后进行具体的技术选型、模型设计、架构设计)

  • React适用于构建大型、复杂的单页应用,toB管理系统等
  • Vue2 options API 适用于中小型的单页应用。Vue3 composition API 和TS的支持也可以开发大型项目,toC移动端应用等

团队适用性

  • 新建项目时,对比技术生态,还要考虑团队开发成员对技术栈的熟悉程度选择大多数人都熟悉的技术栈,有助于提升项目产出效率和质量。
  • 收益:是否能解决当前的某些痛点
  • 考虑风险:不能将一个实验阶段的技术使用在生产环境中

跨端处理

  • APP开发,使用ReactNative
  • 小程序:Vue+uni-app

兼容性

  • PC端:Vue3放弃对IE的支持,React和Vue2都不支持IE8以下的浏览器版本
  • H5端:React没什么兼容问题,Vue3响应式底层使用Proxy实现,在IOS端最低支持0版本

从0搭建前端项目一

  • 技术栈:Vue3.0 + Vite + TypeScript + Element Plus + Vue Router + axios + Pinia
  • 规范化:Eslint + Airbnb JavaScript Style
  • 提交代码规范:husky + lint-staged
  • 包管理:yarn

架构设计

定义

前端架构设计指设计一系列相关的抽象模式(工具和流程的集合),用于指导完成前端项目各个方面的工作

目的

解决已存在或未来可能发生的技术问题,增加前端项目的可管理性、稳定性、可扩展性。提升开发效率、提升产品质量、降低开发难度、降低费用成本的目的。

原则

  • 合适原则:做架构设计时应该从实际场景出发
  • 简单原则:用最简单的方案解决问题
  • 演化原则:架构设计应满足当前的业务需要,还能够应变后续架构升级和调整、变化的需要

工程化

统一规范(无规矩不成方圆)

严格按照Vue开发风格指南执行

  • 项目组织规范:
    • package.json:描述当前的版本、包名、依赖、环境约束、项目配置等
    • dist:项目构建结果输出目录。api/component/store/router/component/mock
  • 代码规范
    • Eslint:(规范制定和检查)
    • Prettier:格式化代码
    • VSCode:插件

Eslint与Prettier冲突

安装两个插件:eslint-config-prettier、eslint-plugin-prettier

  • eslint-config-prettier:作用是关闭eslint与prettier相互冲突的规则
  • eslint-plugin-prettier:作用是赋予eslint用prettier格式化代码的能力。

开发/测试

开发阶段

  • 脚手架:创建前端应用的目录结构,生成样板代码
  • 公共库:可复用的、维护状态的UI组件、工具模块等公共资源
  • 包管理器:引用第三方库/组件,后续可以跟踪管理依赖
  • 编辑器:提供语法高亮、智能提示、引用跳转等功能,提升开发体验
  • 构建工具:提供语法校验、编译、打包、DevServer等功能,简化工作流
  • 调试套件:提供预览、DevTools、Mock、性能分析等调试功能

测试阶段

  • 单元测试框架:提供针对组件、逻辑的测试支持
  • 静态扫描工具:代码质量、构建产物质量、最佳实践、开发规约等做静态检查
  • 自动化测试工具:针对UI效果和业务流程,提供测试支持
  • 性能测试工具:监测、统计相对准确的性能数据

构建/部署

前端项目构建,其实就是在做依赖打包、文件压缩、代码分割、增量更新与缓存、资源定位、图片处理、 ECMAScript 与 Babel 、 CSS 预编译与 PostCSS 、持续构建和集成、类库打包、构建优化、SSR极限优化等等工作。

部署

在部署过程中,要考虑目标服务器、路径信息是否与项目一一对应,并且可供负责部署到生产环境的开发人员进行配置,部署的操作流程应尽量简单。

考虑团队协作和安全方面的因素,最佳的方式应该是搭建一个可供严格审查、队列控制、操作简化的部署平台,并且有专人负责掌握流程进度

监控

Web 监控平台闭环:采集 - 上报 - 解析 - 计算 - 多维分析 - 实时预警

  • 页面的性能情况:包括各阶段加载耗时,一些关键性的用户体验指标等

  • 用户的行为情况:包括PV、UV、访问来路,路由跳转等

  • 接口的调用情况:通过http访问的外部接口的成功率、耗时情况等

  • 页面的稳定情况:各种前端异常等

  • 数据上报及优化:如何将监控捕获到的数据优雅的上报

架构思想

  • 了解业务:全面调研当前业务和竞品的现状,充分理解当前渲染链路和节点,确认当前存在的问题

  • 寻找方案:预估未来发展的方向,尽可能多的了解相关解决方案或创新自己的方案,比如:SSR,ER,预渲染,预加载,静态化等

  • 评估方案:和相关同学讨论或开会,评估所有可行的方案及其合适度、复杂度、前瞻性和 ROI。选出至少一个候选方案,比如:SSR

  • Demo 开发:基于现有开发能力为所有候选方案开发对应 Demo,提前探路并验证风险和可行性,帮助产出更合适的方案设计

  • 方案设计:梳理清楚 SSR 完整链路上相关节点和合作方,多写、多画、多思考、多讨论相关架构和设计,深入细节产出 RFC 文档

  • RFC 评审:充分评审设计、实现和产物细节,可多次评审直至所有成员达成共识。确定相关开发和团队分工,保证方案完善可执行

  • 落到实处:推进项目开发,多与开发团队沟通,并至少参与一部分编码工作,打通所有相关开发和运维链路,保障产物简单好用

  • 沉淀传承:沉淀文档,通过会议、分享或文章帮助其他人理解 SSR 方案和架构,用好 SSR。做好答疑,并推动方案实施

  • 不断演进:关注 SSR 的发展,演进已有链路,比如,个性化的 SSR,结合 ER 的 SSR 等

前端工程化服务

前端代码Review

  • 代码质量:代码是否简洁、易读、易维护,是否编码风格和规范一致
  • 功能实现:代码是否实现预期功能,是否有潜在的bug或逻辑错误
  • 性能优化:代码是否进行必要的性能优化
    • 大量的网络请求:使用缓存、懒加载、预加载方式解决
    • 大型JS文件:代码分割、懒加载减少文件大小
    • 阻塞渲染的CSS和JS文件:使用异步加载、延迟加载解决
  • 安全性:代码是否存在可能的安全风险
    • 跨站脚本攻击:是否对用户输入进行转义(vue中的v-html)
    • 跨站请求伪造:是否所有的post请求使用CSRF令牌,防止攻击者伪造用户请求
    • 点击劫持:是否使用适当的HTTP头,如X-Frame-Options
    • 输入验证、敏感信息泄漏:是否在客户端和服务端进行输入验证,图形、验证码加入随机真人校验机制
    • 依赖的安全性:第三方依赖是否有安全漏洞
  • 可读性:代码是否易于理解,是否有足够的注释和文档、TS类型声明、变量、函数、类、文件的语义化命名
  • 可复用性:代码是否有高度的模块化和复用性(封装为函数、组件、类、指令、模块)
  • 兼容性:代码是否兼容不同的浏览器和设备
    • 浏览器兼容性:是否支持不同的浏览器(某些浏览器可能不支持的JS特性和CSS属性)
    • 设备兼容性、响应式设计:是否支持所有设备,不同的操作系统、屏幕大小、分辨率等
    • 国际化和本地化,是否支持多种语言和地区(正确使用日期、时间、数字的格式)

前后端协作规范

  • 需求分析。参与者有前后端、测试、产品、项目,对需求宣贯,开发和测试的反馈,确保大家对需求有一致的认知
  • 前后端开发讨论,讨论应用的一些开发设计,沟通技术点、难点、分工问题。
  • 设计接口文档。前后端一起设计,确保符合要求
  • 并行开发。前后端并行开发,后端提供接口文档对接口进行mock,模拟对接后端接口
  • 联调之前,要求后端做好接口测试
  • 真实环境联调。

接口规范

  • RESTful:API设计规范,基于HTTP本身的机制实现
  • 接口文档规范:方法名称、URL,请求参数,响应参数,异常情况、错误代码

培训/知识管理/技术沉淀