一个网站好不好用,打开和切换页面的那几秒,往往就能让人形成第一印象。

这次记录一下 Baekonbeauty 官网 和配套管理工作台采用的技术,以及让访问更顺畅的几个具体设计。既看页面,也看实际请求和项目源码,不把“感觉很快”直接写成跑分。

Baekonbeauty 官网首页实拍

官网首页实拍。后台截图仅保留功能区域,已裁去账号、业务统计和其他敏感区域;管理入口不公开。

先看一组实测:HTML 首字节约 84 毫秒

2026 年 10 月 25 日,在本次执行环境中,对官网首页进行 5 次顺序请求。每次使用独立 curl 进程,启用压缩,不添加绕过缓存的随机参数,也没有进行并发压测。

观察项目本次结果
首页状态与协议5 次均为 HTTP/2 200,无跳转
HTML 首字节时间(TTFB)中位数约 84.4 ms,范围 74.5–103.7 ms
HTML 传输体积gzip 后 1,948 字节,解压后 6,530 字节
官网入口 JavaScriptgzip 后约 82.7 KiB
官网入口 CSSgzip 后约 96.4 KiB

这组数据表示 HTML 文档响应很快,不表示整页在 0.084 秒内全部加载完成。 图片、视频、接口、脚本执行和浏览器绘制还需要各自的时间;这里也没有把三项入口资源的体积当成整页体积。

测试来自单一网络出口,未确认其地区和运营商,因此不能推广成所有地区、所有手机网络的访问结果。

用了什么技术栈?

官网和管理工作台承担不同任务,前端也分开构建。结合线上产物和项目源码,可以确认到以下范围:

部分技术与用途
官网前端Vue 3、Vue Router、Vite 构建;负责产品展示、内容页面和交互
官网内容输出Nginx 分流静态资源,Python 内容渲染服务输出带导航、标题、产品链接的 HTML 与 SEO 信息
管理工作台Vue 3、TypeScript、Vite、Element Plus、Pinia、Vue Router
业务服务端源码Go、Gin、GORM,使用 MySQL 驱动;负责业务接口与数据访问
公开资源传输本次观测到 HTTP/2、gzip、EdgeOne 响应头;部分静态资源带 COS 与缓存命中标识

表中的服务端实现来自当前项目源码;线上前端产物也能看到 Vue、Element Plus 和动态导入等相应特征。本次没有逐个比对所有线上文件与本地构建的哈希,也没有读取生产数据库配置。

技术选型提供工具,真正影响体验的,还包括下面这些具体做法。

官网的快:入口轻、资源分流、需要时再加载

1. 先把入口交到浏览器

官网首页 HTML 压缩后不到 2 KB,而且已经包含导航、主标题、分类和产品链接等可读内容。它同时引用前端资源,后续交互由 Vue 接管。

项目中有专门的服务端内容输出逻辑。这里能确认的是“服务端输出了可读 HTML”,并没有将它笼统称为完整的 Vue SSR 或 hydration 实现。

2. 压缩和边缘缓存各自减少一部分等待

gzip 减少文本资源的传输字节,静态资源分发与缓存则为重复访问提供复用机会。本次官网入口 JS 由约 258 KB 压至约 85 KB,CSS 由约 495 KB 压至约 99 KB。

缓存需要看具体响应:本轮首页 HTML 是 MISS,并带有 no-store;入口 JS 是 RefreshHit;样式资源出现缓存命中标识。

RefreshHit 表示缓存过期后回源校验,确认资源未变,再继续使用缓存,仍然包含校验过程。因此,“首页很快”不能简单解释为“所有内容都直接命中了 CDN 缓存”。这一区别也可以在 EdgeOne 官方响应头说明 中核对。

3. 不一次装下全部语言和图片

官网语言包使用动态导入,部分图片设置了懒加载。这样,当前暂时用不到的语言内容、屏幕下方的部分图片,可以延后获取。

这是把加载顺序安排得更合理。这里没有声称官网所有路由都懒加载,也没有将未验证的图片格式转换写成优化成果。

官网内容渲染服务的源码还对只读公开 API 数据设置了 30 秒进程内缓存,减少短时间内重复获取相同数据。它缓存的是服务端读取的内容数据,与浏览器缓存 HTML、CDN 缓存文件是不同层次。

后台的快:切换页面时,少做重复工作

管理工作台设备处理入口局部实拍

后台功能区局部实拍,裁去了顶部账号与业务统计,未替换为虚构数据。

后台是日常反复使用的工具。与首次打开相比,从列表进入详情、返回原页面、切换功能时的等待,同样值得关注。

1. 站内切换复用应用,业务页面按需加载

管理工作台使用 Vue Router。应用加载后,站内切换通常由前端路由完成,公共布局和已加载的代码可以继续使用,不必每次重新下载完整 HTML。

源码中的页面加载器使用 import.meta.glob 等方式按需加载视图。用户进入相应功能时,再获取对应页面代码。这与 Vue 官方性能指南中的代码分割思路 一致。

部分标记了 keepAlive 的页面还会保留组件实例,当前代码设置最多保留 10 个。返回这些页面时,可以减少重建界面的工作。组件保留不意味着业务数据永远有效,也不意味着所有页面都被缓存。

2. 业务概况并行请求,只取当前需要的数据

工作台概况的源码使用 Promise.allSettled 并行获取多类数据,避免在前端逐项串行等待。

为了展示统计数量,请求每类列表时只取一条记录,并读取接口返回的 total,而不是先下载完整列表再数条数。这可以减少初次传输的数据量;至于数据库如何计算总数,仍取决于后端查询与索引,不能据此宣称统计没有开销。

“最近操作”则在展开时再请求,当前只取 8 条。第一次打开工作台时,就不必为暂时没看的明细列表支付全部加载成本。

管理工作台常用功能入口实拍

常用功能入口实拍,仅展示功能名称与说明,不包含设备编号、顾客资料或业务记录。

3. 后台也启用了压缩,但完整首屏仍要单独测

本次抓取中,后台入口 JS 解压后约 1.87 MB,gzip 传输约 617 KB;入口 CSS 由约 147 KB 压至约 25 KB。压缩显著减少了传输量,浏览器仍需解压和执行代码。

这也提醒我:入口 HTML 小、页面切换流畅,与第一次访问的完整加载速度,是需要分别观察的指标。

做性能,最后还是要回到用户的等待

这套网站中,能够核实的做法包括:较轻的 HTML 入口、压缩与静态资源分发、语言和图片按需加载,以及后台的页面复用、并行请求和明细延后加载。它们分别减少传输、重复初始化与不必要的数据获取,共同为顺畅体验创造条件。

本次没有进行优化前后对照、多地区弱网测试或压力测试,也没有测得 Lighthouse 分数、LCP、INP 等完整浏览器指标,因此不为每一项设计标注虚构的提速百分比。

我更在意的是把这些细节落实到实际流程:官网先让访客看到内容,后台先让操作者找到要处理的功能,再按需要获取明细。后续继续优化,也会从这些可测量的等待开始。

最后修改:2026 年 10 月 25 日
如果觉得我的文章对你有用,请随意赞赏