博客重构与优化记录

1319 字
7 分钟
博客重构与优化记录

博客重构与优化记录#

最近把博客整个换血了一遍:从 Hexo + Butterfly 迁移到 Firefly / Astro 新站,随后完成了一轮系统性性能优化,并把部署链路全面自动化。这篇文章记录整个过程、数据和踩过的坑。

1. 新站:Firefly / Astro#

新站基于 Firefly(Astro 6 + Svelte 5)主题,在原有功能上扩展了玻璃卡片壁纸模式、樱花/涟漪特效、作品集页、音乐播放器等。跟旧站最大的区别:

  • 全静态生成,页面加载极轻
  • 配置驱动,src/config/ 下统一管理所有功能开关
  • Swup 实现 SPA 式页面切换,导航零刷新

2. 性能优化清单#

上线前的体检发现了几处**“首屏浪费”**,逐一处理:

① Swup 重复预取当前页(每次多花 ~98KB)#

官方 preload 插件每次加载都会重复请求当前页 HTML(纯浪费)。处理方式:关掉官方内置预取,换成自研的轻量懒预取——只预取导航栏里的站内链接、排除当前页、浏览器空闲时执行。

后来线上实测又发现:导航链接在 DOM 里出现两次(桌面导航栏 + 移动菜单),导致同一批页面被并发预取两遍(10 个请求)。加了个 URL 去重集合,预取请求从 10 → 5,每次访问省约 325KB 传输。

② Live2D 看板娘延迟加载(首屏省 858KB)#

看板娘引擎 + 模型(纹里 503KB、moc 185KB、引擎 160KB)原来首屏无条件加载。改为用户首次交互后(鼠标移动/点击/滚动)才动态加载,爬虫和纯浏览场景完全不再下载。

③ 图床大图本地化(壁纸 152KB → 84KB)#

原来壁纸和头像走第三方图床(pic.imgdb.cn),那张 1920px 的 JPEG 实测拖慢 load 事件 1.6 秒——图床不可控且是首屏瓶颈。下载转成 WebP 放本地:

  • 壁纸:banner.webp,152KB → 84KB(-45%)
  • 头像:avatar.webp,10KB

④ iconify 图标本地化(外部请求清零)#

看板娘菜单图标原来运行时从 api.iconify.design 拉取(每次 5 个外部请求)。5 个图标 SVG 本地化 + 拦截 iconify API 重定向到本地,第三方请求只剩下网易云音乐 API(音乐功能必需)。

附带优化:樱花特效后台标签页自动暂停渲染;图标库改为按注册表按需打包(dev 内存降 ~400MB)。

3. 部署到 Vercel#

部署选型经历了两个阶段:

CLI 部署 → Git 集成自动部署#

一开始用 vercel --prod 手动上传部署。实测发现两点:

  1. CLI 部署走“上传模式”——本地文件打包上传(14.9MB),每次都要占本地网络和内存
  2. Git 集成的部署更快更省——push 后 Vercel 直接从 GitHub 克隆、云端构建(25s 就 Ready)

改成了 vercel git connect 连接 GitHub 仓库,之后的完整工作流:

git push → GitHub Actions(biome + astro check/build)→ Vercel 云端构建 → 自动上线

域名 blog.morphofly.xyz 也从旧项目迁移到新站(DNS CNAME 早就指向 Vercel,切换秒级生效,旧 Hexo 站已退役)。

4. CI/CD 自动化修复#

顺手把 GitHub Actions 也修好了——之前三个工作流全部监听 master 分支,而仓库主分支是 main,CI 从来没运行过

  • 触发分支 master → main
  • 修掉 biome 首次跑出的 7 个存量 lint 问题(import 排序、格式、forEach 回调)
  • 现在每次 push:Code quality(biome)17s 通过、Build and Check(Node 22/23 双版本 × astro check/build)1m25s 全绿

5. 生产环境安全检查#

给线上站补上了 Vercel Production Checklist 的缺口:

  • Content-Security-Policydefault-src 'self'object-src 'none'frame-ancestors 'none',放行 https 外链资源(文章 iframe、音乐 API 等)
  • Permissions-Policy:禁用摄像头/麦克风/定位/支付等敏感 API
  • 缓存策略:/_astro/* 与静态资源 max-age=31536000, immutable,HTML must-revalidate
  • 自定义 404 页面、HSTS、X-Frame-Options 等

CSP 上线后特意用真实浏览器测了一轮:首页渲染、Swup 页面切换全部正常,Console 零报错零 CSP violation。

6. 实测数据#

冷加载(浏览器禁用缓存 + 清空,连测 3 次,真实首访场景):

指标数据
TTFB55 ~ 123ms
LCP496 ~ 812ms
CLS0.00
Load807 ~ 1115ms
每次传输~665KB / 47 个请求

Lighthouse(desktop):Accessibility 97 · Best Practices 100 · SEO 100。

对比优化前:第三方请求 11 个(~169KB)→ 1 个;看板娘首屏 858KB → 0;壁纸 1.6s 拖累 → 84KB 本地秒开

7. 一个插曲:核弹级 OOM#

手动 CLI 部署时机器两次 OOM(内核杀进程)——排查后发现是 Node 26 + Vercel CLI 上传时的内存膨胀(被杀的进程匿名内存 6.59.9GB、虚地址 4347GB),叠加之前测试残留的浏览器/MCP 进程,15GB 内存被瞬间打爆。

结论:手动 vercel --prod 是“易燃”路径。切换到 Git 集成后构建全程在 Vercel 云端跑,本地只推代码,再也不用担心 OOM

8. 现在的工作流#

日常就是:

Terminal window
git add -A && git commit -m "feat: ..." && git push

剩下全自动:CI 检查 → Vercel 构建 → blog.morphofly.xyz 上线,全链路 1~2 分钟,本地零开销。


技术总结:性能优化不是玄学,是把每个“无谓的请求”消灭掉——首屏只留真正必要的东西,其余的延迟加载或本地化。愿这份记录对同样在折腾博客的人有帮助。

文章分享

如果这篇文章对你有帮助,欢迎分享给更多人!

博客重构与优化记录
https://blog.morphofly.xyz/posts/博客重构与优化记录/
作者
Wings Butterfly
发布于
2026-08-24
许可协议
CC BY-NC-SA 4.0
相关文章智能推荐
1
ADB命令与澎湃OS系统应用精简
Android开发与调试ADB命令 Android Debug Bridge 命令速查 显示已连接的设备 列出已经安装的应用程序 清理应用程序数据 强制停止应用程序 卸载应用程序 停用(冻结)应用程序 小米澎湃OS精简优化 MIUI系统预装软件列表 必须保留的应用…
2
Docker-Compose
开发工具配置与使用docker compose命令 命令说明 · Docker 命令格式 构建(重新构建)项目中的服务容器 启动容器应用服务 此命令会自动构建镜像,(重新)创建服务,启动服务,并关联服务相关容器, 默认情况启动的容器都在前台 停止所启动的容器…
3
HW路由器
网络HW路由器 + 从用户视图进入系统视图 + 设置交换机主机名 + 关闭弹出日志 + 进入接口 + 退出接口 + 保存配置(用户视图) + 查询 配置路由 + 配置路由接口ip地址 + 配置静态路由 ip route static 华为 目的…
4
kubeasy工具部署Kubernetes
ChinaSkills云计算笔记搭建环境 安全组相应规则放开 网络通信正常 系统环境 centos7.9 内存12G 硬盘100G 软件包与镜像等齐全 内网文件服务器http://192.168.103.5/FileServer 主机节点 192.168.103.105 …
5
docker命令
开发工具配置与使用Docker 命令大全 菜鸟教程 Docker 从入门到实践 容器操作 + 列出所有容器 Docker ps 命令 菜鸟教程 容器生命周期管理 + 使用容器镜像创建一个新的容器,并运行一个命令 Docker run 命令 菜鸟教程 + 删除…
随机文章随机推荐
Profile Image of the Author
WingsButterfly(蝶䌻)
An Indie Dev on a long journey.
公告
欢迎来到我的博客!这是一则示例公告。
音乐
封面

音乐

暂未播放

0:000:00
暂无歌词
分类
标签
站点统计
文章
17
分类
7
标签
17
总字数
5,621
运行时长
0
最后活动
0 天前
站点信息
构建平台
Vercel
博客版本
Firefly v6.13.5
文章许可
CC BY-NC-SA 4.0

文章目录