第 92 期 - 腾讯文档前端工程架构改造全解析
logoFRONTALK AI/1月24日 16:33/阅读原文

摘要

腾讯基础开发中心负责腾讯文档相关业务,面临多仓库开发效率低、维护成本高的问题。文章讲述了针对老旧工程架构的改造实践,包括 npm 包自动化发布、组件库构建优化、大仓脱困尝试以及防止代码劣化的措施等。

腾讯文档前端工程架构面临的问题

腾讯基础开发中心负责腾讯文档除编辑器外的大部分业务,涉及众多的 npm 包、CDN 组件和 application 服务,散落在多个业务仓库。随着业务和人员增长,旧架构下开发效率低,如一个小业务需求可能涉及多个仓库,发布测试包等流程繁琐,耗时久。且多仓库基础设施维护成本高。

npm 包仓库自动化发布系统的构建

发布困难的原因

有个近 140 个 npm 包的仓库,基建老旧,采用老旧 webpack 构建,发布繁琐混乱。文档虽有但改动仍耗时,且存在流程不规范导致的代码不同源问题,例如有同学在特性分支直接发 latest 版本不合入主干,离职后部分代码丢失。还有依赖混乱脆弱、幽灵依赖等问题。

借助现代科技实现快速发布

优化组件库的构建体积与速度

npm 打包最佳实践

老旧的 webpack 构建设置使 npm 包产出 cjs 格式 bundle 且无 external,体积大。经研究,external 所有依赖后可降低单包编译时间,加持 Nx 多线程并发构建,全量构建时间从 7min 降到 2min,且流水线按需构建受影响包,多数情况 1min 内可从 push 到发布测试包。基于此总结出发布 npm 包的最佳实践并搭建仓库脚手架,还采取渐进式构建升级,提供两套构建器供开发同学验证功能后合入主干。

进一步提升速度

多仓库困境与大仓脱困尝试

多仓库的困境

维护着七个仓库,一个小需求可能涉及三四个仓库,开发流程复杂低效。开发命令风格各异,开发模式下更新代码困难,各仓库基建老旧,同步代码难,这些都是多仓库带来的问题。

大仓的搭建与问题解决

阻止代码劣化的措施

粗糙体积检查的问题

站点体积影响加载速度,需要监控体积变化,但最初的体积检查方案问题多多。扫描 js 体积数据不准确,应关注首屏加载资源体积变更;检查易有误差,因为多人提交代码会更新基线体积;部署流水线无法阻断合入,效果有限;体积增长来源难分析,开发同学无法自查问题。

更优雅的体积检查实现

使用 bundle - status 工具进行产物分析,官方提供本地运行的插件与 ci,但效率低。优化方案为每次代码合入主干后,运行 bundle - status 的 baseline 模式,将当前 commit 的 baseline.json 重命名为{commit hash}.json 储存到 cos 中,流水线检查前通过 git merge - rebase 命令查找共同祖先节点获取其体积数据作为基线体积,对比超出红线限制则将对比产出的 html 上传到 CDN 并输出到 MR 评论区和体积检查群中方便开发同学排查。同时借助 Nx 远程缓存能力将体积检查移到 MR 流水线中,工蜂可配置跳过未成功的流水线检查。

总结

 

扩展阅读

Made by 捣鼓键盘的小麦 / © 2025 Front Talk 版权所有