很多前端同学在工作中都会接触到“CMS 管理后台”和“WebUI 展示端”这两个项目。它们通常都有各自的在线地址,比如 cms.xxx.com 和 www.xxx.com。
但正是因为“都在浏览器里打开”,很多人会混淆它们的角色,搞不清楚:这个在线页面到底是怎样影响最终用户看到的页面的?要改功能到底该动哪个仓库?
这篇文章就用“在线地址”这个视角,把整条链路拆解清楚。
1. 两个在线地址,两个完全独立的仓库
假设你参与的项目是这样的:
-
CMS 管理后台:
https://cms.xxx.com -
用户端网站:
https://www.xxx.com -
后端 API:
https://api.xxx.com
这三个域名背后,对应的是三个独立的代码仓库和部署单元:
| 地址 | 背后是什么 | 谁在用 |
|---|---|---|
cms.xxx.com | CMS 前端仓库 build 出来的静态资源,部署到 CDN/服务器 | 运营/编辑,在浏览器里打开,填内容 |
www.xxx.com | WebUI 仓库 build 出来的静态资源,部署到 CDN/服务器 | 最终用户,在浏览器里打开,看内容 |
api.xxx.com | CMS 后端服务,跑在服务器上 | 被 CMS 前端和 WebUI 前端共同调用 |
核心认知:CMS 的代码和 WebUI 的代码,不在同一个仓库里,也不部署在同一个域名下。它们是两条完全独立的前端项目线。
2. 一次内容更新,到底发生了什么?
假设运营同学在 cms.xxx.com 上编辑了一篇文章,点击“发布”。
整条链路是这样走的:
text
运营的浏览器(打开 cms.xxx.com)
↓ 操作编辑页面的 JS 代码
CMS 前端(项目 A)捕获“保存”事件
↓ 调用 fetch('/api/article/123')
后端 API(api.xxx.com)把文章内容存入数据库
到这里,CMS 的使命就完成了。它不负责把内容推送给用户,只负责把内容存好。
然后,当最终用户访问 www.xxx.com:
text
用户的浏览器(打开 www.xxx.com)
↓ 加载 WebUI 的 HTML/JS/CSS
WebUI 前端(项目 B)初始化
↓ 调用 fetch('/api/article/123')
后端 API 返回文章数据(标题、正文、封面图)
↓
WebUI 代码把数据渲染成页面 DOM
↓
浏览器内核根据 DOM 绘制出用户看到的网页
关键点:CMS 代码和 WebUI 代码从未直接对话,它们唯一的交集是“共享同一个后端 API”。
3. “间接跟浏览器内核交互”到底是什么意思?
你之前提的这个问题很精准:CMS 在线页面是不是间接跟浏览器内核交互?
答案是是的,但中间隔了两层。
-
CMS 在线页面:它自己也是一个浏览器里的 SPA,也会操作 DOM、发请求,也要经过浏览器内核。但这只影响运营看到的编辑界面,不影响最终用户。
-
WebUI 在线页面:这才是最终用户看到的界面。WebUI 的 JS 代码调用浏览器提供的 Web API(操作 DOM、发 Fetch、调用 LocalStorage),浏览器内核负责把这些 API 翻译成底层的渲染和网络操作。
所以,“间接交互”的真实含义是:CMS 产出数据 → WebUI 消费数据 → WebUI 驱驾浏览器内核 → 浏览器内核渲染页面。CMS 离浏览器内核,隔着 WebUI 这一整层。
4. 功能改动,到底改哪个仓库?
这是日常开发中最容易扯皮的地方。一个需求过来,到底是 CMS 前端做、还是 WebUI 前端做,还是两边都要动?
一张表说清楚:
| 需求 | 改哪个仓库 | 原因 |
|---|---|---|
| 修正文章的错别字 | 不需要改代码 | 运营登录 cms.xxx.com 直接改内容,数据更新后 www.xxx.com 自动显示新内容 |
| 调整 CMS 编辑器的工具栏按钮 | CMS 前端仓库 | 只影响 cms.xxx.com 的界面 |
| 修改终端用户网页的标题字体颜色 | WebUI 仓库 | CMS 只管“标题是什么”,不管“标题长什么样”,样式归 www.xxx.com 的 CSS 管 |
| 新增一种“视频模块”,运营能在文章里插入视频 | 两个仓库都要动 | ①CMS 前端加视频上传组件 ②WebUI 前端加视频渲染逻辑 |
优化 www.xxx.com 的首屏加载速度 | WebUI 仓库 | 资源打包、懒加载、CDN 策略都在 WebUI 侧 |
| API 接口返回结构调整 | 两个仓库都可能要动 | CMS 调接口存数据,WebUI 调接口取数据,字段名一变两边都要改 |
5. 总结
当你看到 cms.xxx.com 和 www.xxx.com 这两个在线地址时,脑子里应该立刻浮现出这幅图:
text
[cms.xxx.com] → CMS 前端仓库 → 内容生产
↓ ↓
[api.xxx.com] ← 共享后端 API ← 内容存储
↓ ↓
[www.xxx.com] → WebUI 仓库 → 内容消费
↓
[浏览器内核] → 最终渲染
-
CMS 是内容的生产者,它的在线地址是编辑的工坊。
-
WebUI 是内容的消费者,它的在线地址是用户的窗口。
-
两个仓库独立开发、独立部署、通过 API 串联。
-
CMS 不碰浏览器内核的最终渲染,它只负责产出数据;真正“间接跟内核交互”的,是 WebUI。
以后再有人问“这是个 CMS 的需求为什么 WebUI 要动”,你就可以直接把这篇文章发过去——因为两个在线地址背后,是两个世界。
1282



被折叠的 条评论
为什么被折叠?



