本来只是想换掉不太顺手的评论系统,结果看着看着,发现原主题里还有不少积攒下来的屎山:有的组件切换页面后没有好好收拾自己,有的资源明明还没用到就急着加载,还有些依赖已经很久没有认真整理过。
于是干脆做了一次比较彻底的维护。这次没有打算重新设计网站,也没有删除现有功能来换取所谓的“高性能”。我想做的事情很简单:尽量保留这个小窝原本的样子,让它更稳定、更轻一点,也少给以后维护的自己挖坑。
这篇就当作 2026 年 11 月的一次更新记录。
一、终于把评论系统换掉了
之前用的是 Twikoo,这个sb评论系统难用的一逼而且巨难维护!但是现在评论前端已经迁移到了 Waline。
新的评论服务使用独立的 Waline 后端,部署在 Vercel 上,数据库使用 PostgreSQL。网站侧则升级到 @waline/client 3.16.2,不再沿用原来的 Twikoo 接入方式。
对访客来说,最直接的变化就是文章下方的评论区换了一套界面;对我来说,更重要的是可以把评论服务与博客本体分开维护,之后调整审核、通知和交互配置也更方便。
顺便做了一个小优化:评论区只有接近浏览器视口时,才开始加载 Waline。如果只是进来看看文章、还没有滑到评论区,就不用一开始加载整套评论脚本。
当然,迁移过程也不是一路顺利。域名白名单、403 Forbidden 和管理员接口这些东西确实折腾了我一阵子。前端迁移已经完成,但评论的线上提交、审核及通知仍需要继续观察和验证;如果遇到评论发送失败,可以稍后重试。
二、Mizuki 主题:不只是更新依赖版本
这个博客基于 LyraVoid / Mizuki 主题进行修改。原主题的设计和功能我还是很喜欢,所以这次主要是在现有基础上修修补补,没有把它改成另一套完全陌生的界面。
这轮比较大的变化包括:
- Astro 从
5.16.14升级到7.4.5,同步调整 Markdown 的解析配置,保留原有的 remark / rehype 功能。 - Svelte 更新到
5.57.3,整理组件与交互部分的兼容性。 - Tailwind 继续使用 3.x,调整为 PostCSS 编译,并补齐全局主题样式入口。
- 更新 Markdown、KaTeX、RSS、代码高亮、图片处理等相关依赖。
- 重做字体子集化处理,改用能够在 Node.js 24 环境下运行的工具链。
- 优化图标加载,常用图标尽量随网站一起打包,减少运行时对外部接口的依赖。
比起版本号,我其实更在意那些日常使用时不一定马上注意到的问题。
例如,分类按钮的嵌套交互结构修好了;目录、日历、壁纸、GitHub 卡片及 RSS / Atom 的一些输出问题也做了清理。之前小屏幕下桌宠可能留下透明画布、挡住侧栏点击的情况,这次也进行了修复。Mermaid 渲染改为更严格的模式,页面里的动态内容处理也收紧了一些。
还有一个比较重要的改动:Umami 的 API 请求移到了构建阶段,浏览器端只接收需要展示的统计数据,不再直接接触统计密钥。
三、安全和依赖问题
既然开始检查依赖,就索性把安全审计也做了。
本地 pnpm audit 结果:
| 审计结果 | 更新前 | 更新后 |
|---|---|---|
| 严重 | 5 | 0 |
| 高危 | 134 | 0 |
| 中危 | 125 | 0 |
| 低危 | 26 | 1 |
| 合计 | 290 | 1 |
这里需要说清楚:290 到 1 指的是依赖审计告警数量,不代表网站原本有 290 个可以直接利用的漏洞,更不代表现在绝对安全。
剩下的一项来自 deepmerge@4.3.1。目前已经针对相关的原型污染路径加了本地补丁并通过回归测试,但审计工具仍然会根据依赖版本报告这项告警,后续还需要等上游修复并重新检查。
另外,加密文章的公开摘要、目录和搜索产物做了更严格的保护检查;维护脚本也补上了路径校验与避免意外覆盖的处理。不过,静态网站的文章加密并不能替代真正的服务端权限验证,特别敏感的内容依旧不适合靠一个弱密码放在公开站点。
四、性能优化
这是这次改动里花心思最多的一部分。
以前有些资源加载得实在太积极了。比如首页横幅,即使浏览器只需要一个较小的显示尺寸,也可能直接下载体积很大的原始图片。
现在横幅改为使用响应式 <picture>,由浏览器根据设备和显示宽度选择图片;首屏图片则直接出现在 HTML 里,并标记了较高的加载优先级。
此外还做了这些调整:
- 头像与相册图片: 生成合适尺寸的缩略图,点击查看大图时再读取原图;不再预加载整个相册。
- 全屏壁纸: 只有启用对应模式才创建图片,轮播仅加载当前设备和当前画面需要的资源。
- 评论、搜索和图片灯箱: Waline 接近视口时加载,Pagefind 在首次搜索时加载,Fancybox 在首次打开图片时加载。
- 字体: 使用带缓存的 WOFF2 子集化,移除发布目录里已经没有引用的旧字体文件,原始字体仍保留在项目中。
- 图标: 统一初始化入口,减少约 31.9 KB 的重复内联脚本输出。
- 页面交互: 整理目录、日历、打字动画和桌宠的监听器与计时器,减少页面切换后重复绑定或无意义运行的情况。
其中,字体清理在本地发布产物中省去了 13.91 MiB 无引用的 TTF 文件。整站输出目录也从约 98.25 MB 变成了 83.60 MB;不过这段时间还存在文章内容变动,所以不能把整个目录体积的差值都算作性能优化成果。
换句话说,这次的思路不是把功能砍掉,而是让资源在真正需要的时候再出现。
五、铲完屎山后
这轮修改不仅做了编译检查,也加了不少针对实际问题的回归测试。
截至这次本地构建记录:
- 81 项自动测试全部通过。
- Astro 检查 118 个文件,0 错误、0 警告、0 提示。
- 完整构建成功;字体与响应式图片缓存按预期工作。
- 加密文章的构建产物通过隔离扫描和解密验证。
- 页面切换、日历请求复用、目录滚动事件合并等逻辑通过回归测试。
目前也没有可用于宣称“提速多少百分比”的线上 LCP 或 Lighthouse 对照成绩。上面列出的数字是本地构建结果和特定条件下的实际资源加载记录。
写在最后
折腾完这一轮,博客看起来好像没有发生什么惊天动地的变化:它还是那个熟悉的 Mizuki 风格,还是我用来放文章、记点东西的小窝。
不过我觉得这样就挺好了。一个网站不是非得每次更新都多出十几个新功能;能把老问题解决、把不必要的负担减轻,让以后打开它的人少遇到一些莫名其妙的小毛病,就已经很值得。
接下来会继续观察 Waline 的实际使用情况,补完浏览器端的验证,也会慢慢把剩下的边角问题收拾干净。
感谢 Mizuki 原主题项目 以及相关开源项目的作者。本站做的这些维护与修改属于个人站点的适配,并不是原主题的官方更新。
就这样,希望这个小破站还能安安稳稳地运行下去。
部分信息可能已经过时