前端研发框架Rome实践和演进趋势

如果无法正常显示,请先停止浏览器的去广告插件。
分享至:
1. 前端研发框架Rome实践和演进趋势 框架生态、度量和趋势思考 2023年6月3日 美团到店
2. 主讲人介绍 陈伟 github.com/screetBloom Rome 前端研发框架 简单介绍: 2018.7 加入美团,目前在到店餐饮研发 | 前端技术研发组 公司级前端框架Rome的主要负责人之一,工作之余核心参与 Vuese、esbuild、VueCLI的建设,有较丰富的前端工程化相 关经验,近期专注在 LangChain.js 领域的学习探索
3. 目录 • 背景介绍 • 工程生态、演变路径和规模化升级 • 框架开发辅助 • 框架度量和业务实践 • 总结和工程框架趋势思考
4. 背景介绍 研发框架Rome - 业务背景 组织 规模大,横向流动协同多 新人比例高(15%)需快速融入 业务 业务高速迭代(交付快+质量好) 系统 存量系统迁移、升级和重构,频繁系统交接
5. 背景介绍 研发框架Rome - 技术背景 开发架构不统一,无法支撑大团队高效迭代和技术演进
6. 背景介绍 小结 1、基础架构 基于纯静态S3架构进行前端框架建设,原因主要是存量 Node.js 前后端一体的架构存在下述问题: 1、诉求低:事业群早期主要为中后台场景业务,对⻚面秒开、SEO的诉求弱 2、⻛险高:运维的动态扩缩容、峰值流量处理等基础设施⻛险 3、成本高:机器成本、开发人员能力要求高、招聘难度大 因此框架层面建设之初基于S3纯静态架构,建设路径不会采取类似 Egg.js这样的前后端一体框架 2、研发规范 各个团队间流程、规范、技术栈多样,因此框架层也要解决研发流程不规范、交付质量不高等问题,需要提供联动上下游形成系统工程平台,而不仅是CLI工具
7. 一、背景介绍 二、工程生态、演变路径和规模化升级 三、框架开发辅助 四、框架度量和业务实践 五、总结和工程框架趋势思考
8. 工程生态 - 降学习成本 1、目录认知统一(BG/组织ID/项目粒度) 2、收敛依赖选型和版本 3、统一基础开发规范 4、对⻬跨技术栈工程能力和开闭配置 框架约束 工程目录千人千面 上手成本高,心智负担大 业务工程构建配置冗⻓ 工程配置耗时且难升级 依赖碎片化+水平参差 基建接入非标、版本多 工程表象 团队横向难复用+重复建设 规模化升级成本高 研发 问题 解决 方案
9. 工程生态 - 降学习成本 跨技术栈认知一致 目录认知一致 开发调试流程和体验一致 Vue React 工程能力高度对⻬ 生态下80%插件在Vue和React 下用法完全一致
10. 工程生态 - 降学习成本 一行代码引入公司基建(CDN容灾) CDN导致业务不可用时静态资源可以降级重试(支持qiankun) 资源重试
11. 工程生态 - 降学习成本 一行代码引入公司基建(告警监控) 专注业务开发,线上告警、日志链路、首屏计算秒级配置
12. 工程生态 - 降学习成本 一行代码引入公司基建(水印) 专注业务开发,一键完成水印接入
13. 工程生态 - 降建设成本 通过业务一线调研 + 能力盘点,2年内下 共建 并作为大团队横向方案统一维护+接入 31个 工程能力 从历史数据来看,部分核心能力建设成本 15~30pd/个 “小蘑菇” “大树” 生命周期短+重复建设 高质量设计和建设+共建
14. 工程生态 - 降建设成本 基于Serverless的SSR 美团/休娱频道/密室H5 优选/团⻓端/订单管理H5 流量:PV百万级 流量:PV千万级别 秒开:>90% 秒开:>85%
15. 工程生态 - 降建设成本 基于Serverless的SSR(方案流程) 实例(虚拟化+调度) 访问和降级 负载均衡 正常 SSR Node Runtime 网关 5xx 或超时 返回CSR 自动降级CSR SSR Page Func SSR Page Func 判断是否流式等 判断是否流式等 S3 Rome+Arche共建形成到店标准 CSR资源 1、⻚面粒度接入 0.5pd 部署时获取 2、自动降级,基本无运维成本 3、复用公司Serverless基建,秒级冷启动+自动扩缩容 CSR Bundle (默认) Arche 部署 S3 SSR Bundle 构建(⻚面粒度) SSR资源 项目
16. 工程生态 - 研发提效 编译提速 - Webpack体系优化 CI/CD 工具性能优化 技术栈 基础通用 缓存复用 Webpack5 开发优化 编译和压缩切 换SWC Vue技术栈特有配置 (Plugin/Loader) 分粒度构建(page等) 编译和压缩切 换esbuild TS增量编译 React技术栈特有配置 (Plugin/Loader) 基础跨技术栈Webpack配置
17. 工程生态 - 研发提效 编译提速- 开发时一键Vite npx rome vite (createServer拉起⻚面,抹平Webpack差异) 启动 环境变量 Webpack客户端环境变量兼容和注入 配置文件 加载 rome.con g.js 配置转换为Vite配置 技术栈插件 生态兼容 预编译依赖 Vue2/Vue3 SFC+JSX支持 sass兼容 ~@import 公司 基建注入 组件库 按需引入 @vitejs/plugin-react支持react refresh 约定式 路由 html模板 兼容 vite.optimizeDeps (Vue、React和公司依赖包) CJS转 ESM https 等
18. 工程生态 - 研发提效 依赖提速 开发阶段 框架依赖预构建 降体积+降递归依赖数量 切换到Pnpm Yarn => 当前最优 部署阶段(已集成CI/CD) 迁移抹平工具 Rome 定制Docker镜像 锁pnpm版本+内置常用依赖等 Pnpm install 缓存复用 尝试复用node_modules
19. 演变路径 架构和技术栈演进 构建强依赖Webpack 框架强依赖Vue 面向业界趋势解耦UI框架、构建工具 框架 = 插件机制+构建工具+语言特色插件集合
20. 规模化升级 能力需要落地才能产生价值,如何帮助业务低成本的享受好用的能力? 社区很多是“姜太公钓⻥” 公司内要服务好客户 100+个,均值5pd TL:我们也想用Rome好的功能,但是我们 有几百个项目,技术升级成本太高了! 可爱客户: 能力很好,但我不敢升!
21. 规模化升级 存量项目迁移 效果 存量Vue+Webpack场景 1.迁移完成比例 99.13% 17+入口, 400+文件 不符合规范 2.已迁移100+ Vue项目 3.线上 0 case 40% 方案一:通过 babel 静态分析依赖然后移动 60% 方案二:基于 webpack 分析依赖然后移动 数据采集和推断 new Webpack 动态分析 webpack/router + AST静态分析 recast 数据结构缓存 递归树改有向图 拦截 compiler 流程 compiler. normalModuleFactory 文件唯一 引用路径多样 拦截 afterResolve 采集数据 AST语法推断 route/store/app等 cache下来 二次复用 移动和修改引用 质量保障 推断api/lib/图片等 前:迁移diff对比提醒 基于文件含义移动 前:QA资源和主R验收 babel => recast 增强 vue-tpl-compiler 中:talos灰度 回写路径 中:灰度指标监控 提醒已备份 后:快速回滚
22. 规模化升级 V1大版本升级 Git仓库 关键流程 1、自动迁移:框架依赖、幽灵依赖、文件等的改写 DevOp s 2、工程源码对比:除迁移内容外,如 /src路径不变化 监控平台 3、Webpack对比:框架配置外不应变化,异常配置告警 4、产物变动: 监控平台 (1)非框架默认安装依赖基于语意化升级 (2)迁移前后entry数量需保持一致 (3)迁移前后产物体积不明显增大(1M) (4)产物兼容性检测(es5+) 5、线上验证: (1)基于公司内基建自动化拉取关键⻚面,生成迁移前后UI对比图 (2)流量⻚面的验收报告( 标杆业务全部由Rome团队升级+写报告 )
23. 一、背景介绍 二、工程生态、演变路径和规模化升级 三、框架开发辅助 四、框架度量和业务实践 五、总结和工程框架趋势思考
24. 框架开发辅助 为什么基于IDE(VSCode) 业界工程框架开发辅助一般两种形式:Web(Vue UI/Umi UI/Angular Console)、VSCode拓展(IceWorks) Web VSCode拓展
25. 框架开发辅助 为什么基于IDE(VSCode) Web 理解 业界中以 Umi UI(更先进) 和 Vue CLI为主,但是虽然都是基于 Web 去实现的,但 出发点其实大不不一样 (1)体验:Vue UI主要是做工程创建(CLI可视化)、工程分析配置 (2)提效:UMI UI做开发工作台,支持资产插入、执行工程任务(build/lint等) 优势 跨IDE成本低,解决IDE插件中功能交互UI受限的问题(VSCode不会支持) 问题 心智认知:类Umi UI的趋势其实是把开发时用户心智切换到Web端,期望在Chrome 完成所有事情,但研发时高频阶段在IDE看代码、理解代码、写代码,构建/资产/ Lint等任务低频,研发的心智实际切不到Chrome 研发趋势:⻓期研发趋势是部分 Cloud IDE,工程框架的Web端工作台很难融入到研 发链路(创建一般在DevOps)
26. 框架开发辅助 为什么基于IDE(VSCode) VSCode拓展(IceWorks) IDE拓展问题 UI交互受限 + 视窗面积 + 跨IDE开发成本 选型原因 用户频次: 1)看、理解和编码是研发阶段最高频的事情,也是工程中最具 提效价值环节,这部分绕不开IDE,且IDE提供大量LS Api 2)交互受限通过用户引导弥补,可接受 研发整合: 1)在研发趋势上可以通过 IDE 拓展形式同步 Cloud IDE 2)可以在研发时通过Webview+Api的正式整合研发系统,用户流程 操作心智可以一直保留在IDE内 VSCode拓展(RomeWorks) 快速落地: Vue UI、Umi UI采取的NPM包形式都有较严重的版本碎片化问题,难 快速推广大范围落地(如中期增加打点和新能力)
27. 框架开发辅助 - 提效率 1min部署 主要解高频的测试环境部署流程冗⻓问题(2021年Rome非线上环境发布大概10W次/年,核心流程369s/次),节省40~75% 测试卡控异步 部署 测试部署 验收 多平台对接 ⻚面粒度CSR/SSR发布 构建环境模拟和实时日志 同步并流转DevOps节点
28. COE检测 框架开发辅助 - 提质量 质量检测 开发时激活窗口检测、PR时di 代码,巨石工程也秒级 质量检测和ESLint的区别 规模治理:规则动态下发 + 研发rule管理中性化 内容不同:包含ESLint,同时增加了故障包版本、兼容 性、历史业务线上故障分析链接 定位不同:ESLint侧重静态语法检测(如未定义就使 用),质量检测则侧重历史故障检测+不重复发生 时机不同:质量检测包含开发时+PR时,更前置、环节 更完善 故障包检测
29. 框架开发辅助 - 提效率 平台流转 1 设计平台 DevOps平台 打开仓库和分支 无脑打开对应设计稿 3 2 4 开发完返回剩余流程
30. 框架开发辅助 - 提效率 文档提示 若资产库或框架文档站 托管在到店内部知识库 开发时会自动获得 开发时文档+跳转提示
31. 框架开发辅助 Cloud IDE结合 得益于业务 IDE 标准的统一,仅需一次开发 可以看到云端 Remote 模式下已经自动安 装了开发辅助,能力完全一致
32. 一、背景介绍 二、工程生态、演变路径和规模化升级 三、框架开发辅助 四、框架度量和业务实践 五、总结和工程框架趋势思考
33. 框架度量和业务实践 框架度量 - 问题和指标 • 标杆业务支撑的怎么样、哪些是我们的优质用户、用户规模是多少? • 哪些能力用的多、哪些能力用的少、哪些是安装了但是没用起来的? 【覆盖率】 需求覆盖、项目覆盖、人员覆盖率 做为一个 SaaS产品,如何去量化价值? 【使用率】 核心能力开启率、能力使用率 • 下个阶段要核心提升什么,紧跟社区、覆盖率、业务重点场景支撑? 【收益点】 人力节省、工程基建复用、⻛险识 • 我们的客服成本是多少,是否要降低、如何降低? • 指标 别和拦截、降⻛险运营治理成本 【客服】 客服量、每周客服人力、重复TT重 复客服
34. 框架度量和业务实践 框架度量 - 全景建设
35. 框架度量和业务实践 业务实践 落地1442+工程项目,资产库项目数量达115+,到店多数Web项目均为Rome开发 B端系统 C端H5 ReactNative
36. 一、背景介绍 二、工程生态、演变路径和规模化升级 三、框架开发辅助 四、框架度量和业务实践 五、总结和工程框架趋势思考
37. 总结和工程框架趋势思考 不止于CLI(从需求交付视⻆做框架) Nginx 核心关注跨技术栈高频、规模化价值高的环节 • • • • • 依赖环节:依赖环节也是高频提速点,如何帮助大家快速过度到xx方案 开发环节:本地和线上构建优化、开发辅助、工程能力够不够 发布环节:高频的测试环境如何解、线上缓存复用等 链路流转:开发外的链路隐性损耗 …
38. 工程框架趋势思考 未来趋势 开发链路的深度整合 辅助开发工具 Rust基建 构建切换rspack/Vite 编码Copilot 资产库等支持embedding检索
39. Q&A
40. 更多技术干货 欢迎关注“美团技术团队” 扫码查看 前端社招岗位 关注美团招聘 获取更多求职资讯

Home - Wiki
Copyright © 2011-2024 iteam. Current version is 2.137.1. UTC+08:00, 2024-11-17 16:23
浙ICP备14020137号-1 $Map of visitor$