🤖
AI审核中

这个博客三年多来的更新日志

文章摘要

本文根据两个仓库共 809 条 Git 提交整理,记录这个博客从 2023 年 1 月第一次进入 Git 到 2026 年 10 月的完整演进:2023 年从零到可用;2024 年补齐七牛封面、登录封禁、评论审核与缓存;2025 年围绕评论系统深度重构;2026 年上半年引入 AI 问答与 AI 评论审核;7 月并入 total 聚合工程后,又经历了界面重做、自托管字体与图表、评论 AI 容错,9 月一轮集中的性能、可靠性治理和六套主题,以及 10 月接入炊想小程序的后台、重做后台界面、修掉一处存储型 XSS 并把前端重复实现合并成一份。

本文根据两个仓库的完整 Git 提交记录整理:原始 blog 仓库的 431 条提交,以及 total 聚合工程中触及 blog 目录的 378 条提交(含 2026 年 7 月 2 日的迁移提交),共 809 条。 统计截止:2026-10-09(705b9b1);统计分支:两个仓库的 master。两个仓库都没有打过 Git Tag,因此本文按自然年、月份和功能阶段整理。 2026-09-24 更新:补写了 7 月下旬至 9 月的内容;并逐条核对提交日期,把旧版误记到 2025、2026 年的几项改动(七牛封面、Redis 登录封禁、评论先审后显、天气异步缓存等)归回它们实际发生的 2024 年。 2026-10-07 更新:补写 9 月 24 日之后的内容——六套主题、炊想小程序与博客后台、10 月初的打磨和后台重做。当天晚些时候又补充了炊想小程序的后续改动。 2026-10-08 更新:补写 10 月 7 日下午到 8 日的内容——首页“正在做”的项目图标、流萤巡检与天气修复、炊想的订单与反馈回复,统计数字随之更新。 2026-10-13 更新:补充炊想小程序 10 月 10—13 日的登录、邀请与 2.0.19 的界面精修(小程序提交,blog 统计仍截至 705b9b1)。

写在前面

博客上线得比 Git 历史更早——站内最早的一篇文章发布于 2021 年 9 月——但它的代码直到 2023 年 1 月 10 日才第一次放进 Git。这份更新日志从那一天算起。

第一条提交 679a795 放进来的,已经是一个具备文章、分类、标签、评论和后台管理的完整博客。此后三年多,它从一个传统的 Spring Boot 个人博客出发,陆续补上留言互动、邮件通知、天气、访问统计、移动端适配、评论审核和性能优化,又在 2026 年引入了 AI 问答与 AI 评论审核。

2026 年 7 月 2 日,博客以 2c3c5ad 并入 total 多模块工程。仓库换了,历史没有重来:原仓库记录它从 2023 年到 2026 年 6 月的成长,聚合仓库接着记录之后的每一次改动。

并入之后,节奏明显加快。三个多月里,触及 blog 的提交就有 378 条,接近 2024、2025 两年之和(191 条)的两倍;2026 年 9 月以 164 条成为整个历史上提交最多的月份。关注点也在变:新功能还在加,但更多提交是在把已有的东西做扎实——缓存与加载速度、评论与 AI 审核链路的可靠性、移动端的细节,以及测试。blog 模块并入时一个测试都没有,现在有 149 个测试类,其中 62 个是检查模板、样式和脚本约定的契约测试。

一、Git 历史全景

项目 数据
首次提交 2023-01-10
首次提交哈希 679a795
原 blog 仓库 431 次
迁移提交 1 次
迁移后提交 377 次
合计 809 次
有提交的开发日 234 天
最多的一个月 2026-09,164 次
最多的一天 2026-09-23,24 次
统计终点 705b9b1

809 次 = 原仓库 431 次(2023-01-10 至 2026-06-16)+ 迁移提交 1 次(2c3c5ad,2026-07-02)+ 迁移后触及 blog 目录的 377 次(含 6 次合并提交,统计到 2026-10-09 的 705b9b1)。迁移提交代表代码库归属的变化,并不是一次新的功能开发。

各年度提交量

年份 提交数 主要内容
2023 51 初始版本、留言互动、邮件、访问统计、纪念日、天气
2024 82 七牛封面、Redis 登录封禁、评论先审后显、页面缓存、图片交互
2025 109 评论按需加载、后台评论运营、表情体系、心知天气
2026 567 AI 问答与审核、界面重做、聚合部署、六套主题、炊想小程序、性能与可靠性治理
合计 809 从独立博客到持续迭代的聚合应用

2026 年的 567 次提交,由原仓库 1—6 月的 189 次和 total 仓库 7—10 月触及 blog 目录的 378 次组成。

一图看全程

flowchart TB
    subgraph R1["原 blog 仓库:2023-01 至 2026-06,431 次"]
        direction LR
        Y23["2023 · 51 次<br/>从零到可用"] --> Y24["2024 · 82 次<br/>补齐底座"] --> Y25["2025 · 109 次<br/>评论重构"] --> Y26["2026 上半年 · 189 次<br/>AI 进入博客"]
    end
    subgraph R2["total 聚合工程:2026-07 至今,378 次"]
        direction LR
        MV["7 月 2 日<br/>迁入 total"] --> M7["7 月 · 84 次<br/>界面重做"] --> M8["8 月 · 68 次<br/>字体与 AI 容错"] --> M9["9 月 · 164 次<br/>性能与六套主题"] --> M10["10 月 · 62 次<br/>炊想与后台"]
    end
    R1 --> R2

二、2023:从零到可用

2023 年共 51 条提交,大部分集中在上半年。

1. 初始版本

2023 年 1 月 10 日,679a795 完成首次提交。项目以 Spring Boot、Thymeleaf 和 MySQL 为技术底座,一开始就具备个人博客最核心的一组能力:

  • 文章发布与管理;
  • 分类、标签与归档;
  • 评论和后台管理;
  • 基础主题与前台页面。

同一天又连续调整了数据库脚本和页面跳转方式。此后几年里,SQL 备份文件随提交持续更新,为数据库结构和内容留下了一份可追溯的版本记录。

2. 留言、邮件与内容互动

2 月到 4 月,博客从“能展示内容”走向“能和访客交流”:

  • 4997789 更新留言板;
  • 58ad919 修复 QQ 邮箱配置;
  • 7d76b89 增加微信公众号引流;
  • f14811d 修复管理员头像不显示;
  • 88daf33 修复搜索无结果;
  • bc045ef 增加支付宝收款码;
  • 16513e3 优化异常页面样式,966336e 补上 README。

功能还比较零散,但方向已经清楚:博客不仅要能写文章,也要能承载人与人之间的交流。

3. 访问统计、纪念日与天气

4 月起,博客开始有了自己的性格:

  • 59f9a0b 把网站访问量持久化到数据库;
  • 1a9aa78 增加 1000 天纪念日;
  • 8aa0b4c 修复时区问题;
  • f32f81e 优化烟花页面样式;
  • 6176943 接入高德地图,展示实时天气;
  • edd3997、60ad551 增加明日天气和最低气温预报。

4. 写着“the last version”的一次提交

下半年的提交明显变少:7 月取消了公众号引流(a1e0672),8 月修复新建文章时资源加载缓慢(7b1648b)。8 月 14 日的一条提交,说明写的是“the last version: update sql file”(bff611d),之后项目停了整整三个月。

它并不是最后一版。11 月,项目又更新了头像、视频和邮件设置,修复了天气接口异常(8e75520、c7ccf6d)和图片失效的问题。到年底,博客已经不再是一套通用模板,而是有了自己的内容、互动和视觉风格。

三、2024:恢复迭代,把底座补齐

2024 年共 82 条提交,全部集中在 6 月至 11 月,其中 7 月单月 50 条。许多后来一直沿用的基础设施,都是这一年定下来的。

1. 封面、文章链接与音乐

停更半年多之后,项目在 6 月恢复迭代:

  • 675beef 文章缩略图改为七牛云;
  • 111175c 文章链接改为随机 11 位字符(含大写字母),也就是现在文章地址 /post/ 后面的那一串;
  • e0c888a 接入网易云热门歌单;
  • 36f39c8 优化搜索后的页面跳转,a0d665b 修复自动获取 QQ 信息失效;
  • 6542dff 暂时屏蔽留言板视频模块。

2. 登录、审核与缓存

7 月初的几条提交,奠定了之后的安全和性能基础:

  • 05a8e3a 后台登录失败后用 Redis 封禁;
  • 986f6f2 评论改为审核后可见;
  • e25dc89 页面加入缓存;
  • fee7b57 IP 属地显示具体到市;
  • 9560930 删除评论增加二次确认,46713e3 修复删除后页面不刷新。

3. 天气、图片与评论表单

7 月里,交互体验被集中打磨了一轮:

  • d1ffb14 天气改为异步加载并缓存,aaad629 首页增加加载样式;
  • 947434e、c49341c 查看图片支持放大、缩小和左右拖动;
  • 9420c2b、43b5ec2 评论时根据 QQ 号自动填充邮箱和头像,cf12c00 获取 QQ 昵称失败时改用备用接口;
  • ee65427 输入框增加清除按钮,575d296 不填 QQ 时显示默认头像;
  • 54bd32d 升级 ip2region 让定位更准确,并让评论状态的修改实时刷新;
  • 689f6e3 评论支持 emoji,2f30a37 文章页增加返回顶部按钮。

4. 下半年:箴言、视频与个人页面

  • 12b386c 新增“站长箴言”页面;
  • 9d63238 恢复留言板视频,11 月的 700e52b 又换了一批视频;
  • 12c19f0、7ac247d 更新个人简历和“关于”页面;
  • b175d97 留言板图片支持点击查看;
  • f3b39fc 留言板增加直播入口。

这一年没有更换技术底座,却把七牛封面、随机文章链接、Redis 登录封禁、评论先审后显、天气缓存这些“地基”一次补齐了。

四、2025:围绕评论系统深度重构

2025 年共 109 条提交,高峰在 6 月至 8 月。评论、留言板、图片查看、表情和后台管理是主要的改造对象。

1. 评论从全量递归到按需加载

早期的留言板第一次打开就会递归查询全部回复,评论一多,首次访问要 15 秒以上。e790903 改为首屏只查一级评论,点击“展开回复”时再加载子回复,首次访问降到 1 秒以内;9be29b4 把同样的按钮补到了文章页。

7 月,71a89c0 把留言板改为分页查询,之后又支持输入页码跳转(5e4a736),并调整为每页 10 条(16328b4)。这是 2025 年最重要的性能更新:它改的不是一个按钮,而是评论树的加载方式。

2. 后台评论走向可运营

7148def 重构后台评论列表页,449e764 加入分页、状态筛选和关键词搜索。随后陆续补齐:

  • 修复评论数统计错误(55d1d6e)和子级评论 IP 属地为空(8e20a5f);
  • 后台可以点击查看评论里的大图(42207e8);
  • 优化置顶标识和“展开回复”按钮的样式;
  • 12 月支持修改评论的排序值,并按排序值升序或降序显示(24f4c8e、61f45a8)。

评论系统从简单的数据展示,变成了可审核、可检索、可排序的后台工作流。

3. 图片与表情

这一年持续处理真实使用中遇到的边界问题:

  • a21de04 修复表情只能插入到文末,b11edca 修复表情包超出手机屏幕;
  • 11520b2 支持把表情包 URL 一键生成图片,可预览、可删除;
  • 0facbc6 修复子评论图片不能点击,928661e 修复手机端看图时窗口抖动;
  • c139a74、30e2b4e 同一条留言、同一篇文章里的多张图片可以左右滑动查看;
  • 477be52、685d4c6 先后重构留言板和文章页的表情模块,8—9 月又多次补充表情。

4. 回复、阅读与外部服务

  • b0091fa 重构留言板回复功能,75bc2f8 回复框集成表情;
  • 4b39c9b 文章代码块增加“复制”按钮,ad1f17e 调整文章字体和字号,改善电脑端阅读;
  • b43c2cc 留言超过一定行数自动折叠,可展开查看全文;
  • 28e7607、ea8c005 IP 解析改为“有市到市、有省到省、都没有到国家”的逐级降级,5cf9367 显示城市;
  • 64ba4f3 根据 QQ 号获取昵称的接口失效,改为只自动补充头像和邮箱;
  • 700c2c9 天气接口改用心知天气;
  • 2dc7da8 管理员登录页增加验证码;
  • fe10cc8 美化邮件提醒样式,5041a1d 页脚加上 Copyright,年底的 b44abc4 给留言页加上友链。

五、2026 上半年:AI 进入博客

原 blog 仓库在 2026 年 1 月至 6 月共有 189 条提交,其中 3 月单月 118 条,是迁入 total 之前最密集的一个月。

1. 年初:归档、留言板与交互修复

  • a94a01e 重构归档页面;
  • dc53cf2 修复从任意页面进入文章详情页时脚本不生效,提交说明里特意标了“重大更新”;
  • 39ad9e7、2bed668 修复移动端汉堡菜单无法关闭;
  • fd8a8e1 重构留言板 UI;
  • 2349071 邮件提醒里点“查看完整对话”,直接跳到对应楼层;
  • 1dffeec 文章代码块支持折叠与展开;
  • b95a239 等提交补充了大量表情。

2. 3 月:安全修复与个人化页面

  • e7f23b5 集中修复 XSS 和文件上传漏洞,并加固登录与 HTTP 请求处理;
  • ea12af6 新增纪念日页面,b3da6d9 页脚加入“每日一句”,ab8c2cd 支持播放每日一句的音频;
  • b1ef971、a5e3acc 留言板加入弹幕墙;
  • ce0e6fd、61cacb8 文章可以生成分享卡片;
  • a87dfec 文章页增加“热门文章”和“最新文章”。

3. AI 摘要、AI 问答与 AI 审核

3 月中下旬,AI 能力正式进入博客的主流程:

  • d204c30 文章页调用 AI 自动生成摘要;
  • 22ec53c 文章页加入 AI 对话机器人,随后补上 Markdown 实时渲染、暂停、复制和重新生成;
  • a7688cd 引入 AI 评论审核与自动回复,28f6bcc 审核被拒时发邮件通知;
  • 4fdc9f9 审核和回复支持识别图片表情,a6d897d 提交评论时实时展示审核状态;
  • 1f84be1 AI 摘要支持 Markdown,同时给博主、博主夫人的评论加上身份标识。

AI 不再只是一个独立的聊天入口,而是进入了摘要、问答、评论审核与回复等多个环节。之后的提交反复调整模型、提示词和错误处理,重心从“能调用接口”转向“稳定可用”。

4. 公众号解锁:上线与撤下

3 月下旬,博客试行文章阅读限制:02e3781 为文章增加公众号引流,c10190b 把“查看全文”按钮接入公众号自动回复的验证码,51b0627 修复了直接修改浏览器 Local Storage 就能绕过验证的漏洞。这套机制运行了一个半月,5 月 11 日由 5aad567 移除。

5. 3 月底至 6 月:搜索、加载动画与 IP 定位

  • fbf5c82 重构搜索框并高亮搜索结果,48d0cca 重构搜索结果页;
  • 253a6e6 IP 定位改为调用在线接口,本地 ip2region 退为兜底;
  • 1c25ba1 给前台页面统一加上加载动画;
  • f054462 重构箴言页面;
  • 8e4d433 页脚加上备案号;
  • 6 月 16 日,b3a6ded 重构搜索框和分类页,这是原 blog 仓库的最后一条提交。

六、2026 年 7 月:迁入 total,界面重做

7 月,total 仓库中触及 blog 的提交共 84 条(含迁移提交)。

1. 从独立仓库迁入聚合工程

2026 年 7 月 2 日,2c3c5ad 把博客、AI 对话、打牌记账和运动步数四个项目合并为单 JVM 的多模块工程。博客源码进入 blog 模块,由统一的 Launcher 打包和启动。因此 2c3c5ad 是仓库迁移的节点,而不是博客真正的首次提交。

2. 前后台界面重做

  • 363daa2 完全重构博客 UI,dc8684d 跟进移动端适配;
  • 之后多条提交完善页面加载遮罩、首页卡片和“关于”页的资源卡片;
  • c9b6eaf、add941e 重构后台界面和友链管理;
  • cda9bf9 首页加入项目展示,留言板在电脑端加入竖屏视频流,3e5dc16 加快了视频切换。

3. AI 功能的收与放

  • 7 月 14 日,46a9d0b 下线了 3 月上线的文章 AI 摘要;
  • 10d4d2b 把全部 AI 功能统一到 gpt-oss 模型;
  • 308c065 博主自己的评论不再等待 AI 回复;
  • eb8736e 修复 AI 机器人多轮对话不稳定,并补齐首页、归档、文章、搜索、留言、回复弹窗、分页和浮动按钮的暗色样式。

4. 评论定位与审核一致性

7 月 10 日前后,弹幕墙完成并持续优化。7 月 15 日集中处理通过链接定位到某条评论的体验:定位提示从改变背景色,收敛为一次短暂的脉冲,电脑端和移动端表现一致。be0d3b5 统一了评论审核逻辑,修复后台已经审核通过、前台却因为状态判断不一致而不显示的问题。

5. 归档页、首页卡片与 Mermaid 图表

7 月 25 日,287ccd1 重新设计归档页和首页卡片:归档按年、月组织,年份可以平滑展开和折叠,首页卡片用文章缩略图做虚化背景。旧版更新日志就统计到这一条为止。

同一天,299cc9c 让文章支持渲染 Mermaid 图表,并适配明暗两套主题。本文第一节那张“一图看全程”,用的就是它。

6. 月底:留言板、邮件与 AI 回退

  • 72665ae 移除本地 ip2region 兜底,删掉约 11 MB 的离线 IP 库;
  • 4e0ea74 留言板视频改为直接使用视频站的 MP4 直链,不再由服务器下载缓存;
  • 5151aa4、6df1a22 完善评论的邮件通知流程,补足失败重试;
  • a26db98、fe80d48 重做响应式弹幕墙;
  • 729e286 等提交重排移动端首页卡片的信息层级,修复长标题溢出;
  • 7 月 31 日,评论审核与回复改为按额度自动回退、按内容类型分流,文字和图片分别交给不同的模型(39c7b3c、ccf9b5f、5e22159、504b32e)。

七、2026 年 8 月:读得舒服,评得可靠

8 月共 68 条提交,主要围绕两件事:阅读体验,以及评论区 AI 的可靠性。

1. 字体、目录与图表查看器

  • 8 月 5 日先试了 MiSans,当天就改为分层的自托管字体:中文正文用霞鹜文楷屏幕阅读版,西文用 Inter,代码用 JetBrains Mono,同时优化了文章目录(0e7063b、b4d35b3、3f0df8c);
  • 09ed071 为 Mermaid 图表加上原生 SVG 查看器,可以拖动和缩放,之后又简化了手势、补齐了暗色样式;
  • 611bcb3 阅读时长改为按内容类型估算:中文按字、英文按词,代码按行,图片、表格和图表各自计时;
  • fa01f15 电脑端首页摘要显示四行,1a80a6f 点文章页的评论数可以直接跳到评论区;
  • e403555 打开和关闭弹层前后,页面保持在原来的阅读位置。

2. 暗色主题补全

1936d9f 重新调校暗色主题的配色,77532c6 把暗色覆盖到剩下的页面和组件,两次都用视觉契约测试守住结果;ce3ea87 简化了暗色下的顶栏搜索框。

3. 评论 AI 的路由与容错

  • 8 月里评论审核与回复的模型路由调整了好几轮,最终统一到 gpt-5.6-luna(d59f10c、190aa4f、1ee1fe0、0cdc31e);
  • be6463b 评论里的图片改为以 data URL 发给模型,32da8fd 连续回复时保留图片上下文,6214432 按消息类型构造 AI 回复的对话;
  • 83c4ef1 避免 AI 回复照抄读者用过的表情;
  • c4bdad7 前台不再暴露 AI 失败的细节,b0d3d05 容忍较慢的图片回复;
  • 828cfb6、292efc4 文章里的 AI 助手改为读取整篇文章作为上下文。

4. 天气、分享卡片与首页入口

  • 0cf1ccc、30aadb6 天气图标换成心知天气的官方图标;
  • 60c1fcb 天气结果加上缓存,首页返回的数据也瘦了身,随后修复定位编码和坐标解析(88c97a5、fc8cdad);
  • bd1b5c9 重新设计电脑端的分享卡片;
  • 88d41b1、4d391ff 编辑文章时可以直接新建标签,新旧标签混合保存也不会出错;
  • d617b1e 随机封面扩充到 200 张,76bba1f 友链悬浮时显示完整描述;
  • 4da08c2 提交评论后,自动定位到自己的评论和随后的 AI 回复;
  • 210a5b6、c174209、fd3ef66 首页项目区陆续加入“VX步数助手”“QQ空间时光库”和“抖音续火花”的入口。

八、2026 年 9 月:性能、可靠性与六套主题

9 月共 164 条提交,是整个历史上提交最多的一个月。前三周以体检和打磨为主,最后一周做了六套主题。这个月的提交说明大多附带了实测数据、排查过程和回归测试;很多改动是在做减法:删掉从未用到的脚本、样式和静态文件,把字体裁成子集,把大图换成缩略图。

1. 一次全面体检

9 月 4 日至 7 日,对博客做了一轮系统检查,挖出几个藏得很深的问题:

  • 缓存形同虚设:每次文章浏览都会调用一个带 @CacheEvict(allEntries = true) 的方法,等于每看一篇文章就清空整个文章缓存。浏览量改为 SQL 原子自增,顺带修掉了并发浏览时计数互相覆盖的问题(3c127e1)。
  • 缓存注解静默失效:同一个类内部直接调用带缓存注解的方法会绕过 Spring 代理,有两处缓存从来没生效过(5aaadfa)。搜索结果和评论分页原本与文章共用一个缓存区,换着关键词或页码刷就能把文章缓存挤空,现在各用各的(0a91ce0、15e0385)。
  • 定时任务从未运行:blog 模块缺少 @EnableScheduling,AI 审核失败或卡在待处理的评论,从来没有被自动重试过。补上之后,又给定时任务配了独立的调度线程,免得占住邮件重试(c308307)。
  • 后端小毛病:删除文章缺少事务、删标签或分类会留下孤儿关联、公开接口的每页条数没有上限、批量 AI 处理会被线程池拒绝打断等 7 个问题一并修复(8308c07)。
  • 前端负担:首屏去掉约 250 KB 从未使用过的阻塞脚本(Valine、APlayer、Meting);模板里的内联样式外置为独立样式表,模板瘦身 652 KB;搜索页不再把整篇正文塞进页面,摘要改由服务端截取;归档页从“每个月查一次库”改为一次取回(0a91ce0、1718914、4101224、f609306)。
  • 移动端点击高亮:手指点过按钮、卡片后残留的悬停背景,前后三轮、共处理 504 条样式规则才彻底清干净(9788c9d、defde6d、d14b682)。

2. 评论身份与 AI 审核链路

  • 9 月 5 日的一次合并改了身份判定方式,452 条博主评论全部显示成了访客,“博主夫人”的标签也整段消失。现在改为提交评论时按 QQ 固定头像,身份标签只看头像(9fd4428、74b1fd1);博主自己的留言也不再收到 AI 回复(880b66e)。
  • 图床开了防盗链,而服务器下载评论配图时没带 Referer,带图评论的 AI 回复因此一直失败,有两条评论各被重试了 312 次、持续约 6.5 天(03eb1f9)。现在,重试也无济于事的错误立即停手,其余失败给 24 小时窗口,超出就转人工并发邮件提醒博主(c912eb5)。
  • 还查出一个藏了一个多月的问题:请求里图片的 detail 参数传了上游不认的值,从 8 月 6 日起,所有带图评论的审核都没有成功过(0d88347)。
  • 上游模型单次响应要将近一分钟,超时却只设了 30 秒,每次都在对方算完、计费之后才放弃再重试;超时放宽到 90 秒(576db33)。
  • 后台删除评论不再留下“孤儿回复”:删除前列出会被连带删除的回复,历史遗留的 29 条也一并清理(c9b9b07)。

3. “跳到评论”这件小事

点击评论数跳到评论区、从邮件里的链接定位到某一楼、提交后跳到自己的评论——这几条路径原本有三种不同的行为。9 月 9 日到 11 日的 10 次提交,把它们统一成一套平滑定位:先算好最终落点再滚动,等滚动真正停稳后再校正;落点避开吸顶的顶栏,让目标在屏幕里垂直居中;弱网下图片陆续加载时继续跟踪位置,用户一动手就让位(5f921f2、6c408a9、ee6a189、23cef8f)。

中间还绕了一段弯路:先是以为全站没有平滑滚动,用脚本接管了锚点跳转;结果窄屏下真正在滚动的是 body 而不是 html,脚本去滚一个根本滚不动的容器,反而让点击彻底失效。最后把跳转还给浏览器的原生行为,只在 CSS 里给 body 也声明平滑滚动(5d75e2a、d443127、d128e5a)。

4. 图片、字体与静态资源瘦身

  • 图片:文章和评论里的图床原图,在渲染时自动走七牛压缩。留言板上曾有一张 32.9 MB 的原图,整页 42 MB;9 MB 的手机照片压缩后只有 57 KB。压不动的超大原图会退回原图,不会裂图(1bd2edd、d0d8ba1)。
  • Mermaid 按需加载:497 篇文章里只有 33 篇有图表,其余页面不再下载 Mermaid(eedd555)。
  • 样式库裁剪:Semantic UI 按 6 类真实页面实际命中的规则裁剪,564 KB → 37 KB;Font Awesome 6 原本每页要加载两个版本,现在只留一个(eedd555)。
  • 字体子集:图标字体只保留用到的图标,252 KB → 约 17 KB(7f559c2、f41bdaa);Inter 与 JetBrains Mono 裁成拉丁子集,539 KB → 119 KB(d338b73);霞鹜文楷原本按 Unicode 区段切成 97 个分片,一个页面要下 0.8—1.1 MB,换一页又得下一批,现在统计全站实际用到的 3000 多个汉字,做成一个约 0.85 MB 的单文件,整站复用、缓存一年(37432c0 至 951fe91)。
  • 缓存策略:CSS 和 JS 改用内容哈希命名,内容不变就一直命中缓存,可以放心缓存一年(eedd555、a792970)。

这一轮也翻过车:57e10b2 调整静态资源映射时把路径写错,上线后 54 个静态资源里有 51 个 404,页面直接没了样式。当即回滚,先补上能抓住这类错误的契约测试,再重做了一遍(025f1f8、95c9c03)。

5. 音乐播放器、首页与弹幕墙

  • c7ce19e 新增音乐播放器:悬浮在左下角,播放列表由后台维护,支持顺序、随机和单曲循环,也能用系统媒体面板和耳机切歌。跨页续播做出来之后又主动去掉了(bc34660)——移动端必然拦截自动播放,续播反而会让播放器在每个页面自己弹开。
  • 后台可以直接搜索网易云并一键添加(a530b5a);添加前会像未登录的访客一样实际探测能否完整播放,只能试听 30 秒的歌不许入库(6cf9be3)。播放器封面从 7 MB 的原图换成约 20 KB 的缩略图(1a06cb9)。
  • 首页在电脑端恢复了顶部的介绍区,移动端整块隐藏,让首屏直接看到文章(f1c4c76);深色模式下“阅读最新文章”按钮原本是白底白字,对比度只有 1.05:1,修正后为 14.36:1(bee9652)。
  • 弹幕墙去掉 ORDER BY RAND() 抽样,改为全量下发并缓存,前端洗牌后逐条播完才会重复(53002e0)。

6. 后台:封面、图片与附件都接到七牛

  • 选择文章缩略图时,原来的选择器列出的 247 个本地附件早已全部 404;现在直接列出七牛上的封面目录,按编号排序、懒加载缩略图(c439022)。
  • 文章编辑器里粘贴或拖入图片,会自动上传到七牛,正文只保存外链(4ab8404)。
  • 附件管理改为直接管理七牛上的图片:显示每张图被哪些文章、评论和模板引用,删除前列出引用位置,并且需要邮箱验证码(57a6a78)。
  • 电脑端编辑文章时,右侧实时显示发布后的效果;全部后台页面在 320—1920 px 的七种宽度下逐页修了排版(0d725f7)。
  • 清理后台“设置了也不生效”的选项,文章页开始显示原创或转载(9db44f2、a16c679)。

7. 留言框:照片与表情包面板

  • 留言可以上传照片(2503614):浏览器先把照片压缩成长边 1600 px 的 JPEG,顺带去掉 EXIF 里的拍摄地点;连同表情包一条最多 4 张,与 AI 审核一次能看的数量一致,审核通过后才显示。
  • 表情包面板重做:电脑端是跟随按钮的浮层,手机端是底部抽屉,主评论框和回复弹窗共用一套逻辑;表情和表情包面板都加上了“最近用过”(76b01ca、01eae26)。
  • 通知邮件里的图片改为内嵌附件,在 QQ 邮箱里也能正常显示(1a987fe)。
  • 评论头像改用 120 px 宽的缩略图,原本 65 KB 的头像现在只有 2 KB(7f64391)。

8. 加载、收录与分享

  • 前端第三方库改用放在七牛上的固定版本副本,实测加载时间从 3—4.6 秒降到 0.2—0.5 秒(86fbfb1);Mermaid 也改用自己的副本(3b89e82)。
  • 34 段内联脚本外置,文章页每次访问少下约 54 KB;不存在的页面正确返回 404,并新增了 robots.txt 和站点地图(86fbfb1)。
  • 赞赏二维码改为点开才加载(a75f5dd);恋爱页 3.3 MB 的 GIF 背景换成 343 KB 的循环视频(c27c73c);删除 205 个没有被引用的静态文件,共 16.7 MB(84c69e3)。
  • Mermaid 图表和代码块渲染时保持阅读位置,正文不再被整段顶走(d44eaff)。
  • 页面统一输出描述、canonical 和分享卡片信息,链接分享出去时能显示标题、摘要和封面;搜索、标签和分类页的封面换成缩略图;留言板视频在访客点开之前只取元数据;手机上放开了双指缩放(5659236)。

9. 最后一周:从换肤到六套主题

9 月 25 日起,博客从“一套样式”变成了“六套主题”。原来的样式保留下来,叫“云笺”;新加的五套页面结构各不相同,读的是同一个数据库、跑的是同一个后端:

  • 9 月 25 日上线第一套“纸墨”,后台一键切换、前后台同步(dcd6684);26 日加了“画报”和“格致”,后台外观四选一(1098a7b);28 日加了参考星空首屏做的“星河”(e9c631a);30 日加了“流萤”,主题切换移到后台“外观 → 主题”(32d10ea),现在站点用的就是它。
  • 新主题上线后连着做了几轮逐屏排查:代码块统一深底浅字(d982238),评论框图标、大图、恋爱计时、天气占位(95e8194),留言框的表情、表情包、照片改成贴在输入框底边的工具栏(7540ca9),四套主题的黑夜模式(14df6a7)。
  • 交互也一起改了:明暗切换从点击处圆形扩散、汉堡菜单动画(2d7f6e8),整张文章卡片可点、页面跳转淡入淡出(403b70c),点站内链接后顶部立刻出现换页进度条(d61fc7e),菜单支持键盘操作(c109c06)。

同一周还有几件独立的事:评论深链能一次定位到楼中楼的回复(a1c5273);AI 回复会分清每张图是谁发的(db994a6);页面不再同步等 IP 定位和天气接口(e72b1dc);文章支持数学公式,KaTeX 按需加载,中转站的模型换成 gpt-6-luna(24b15b1);9 月 29 日又做了一轮全项目排查(fe6b741)。

10. 站点运维

下面几项主要改的是部署脚本和服务器配置,大多不在 blog 目录里,没有计入上面的统计,但同样关系到博客能否稳定访问:

  • 六个应用共用一个 JVM、串行启动,博客从最后一个改为第一个启动,发版或重启时不必再等另外五个(439f171);重启期间访问会看到“站点正在重启”的说明页,15 秒后自动刷新(d61604e)。
  • 移除未使用的 Selenium 和 FreeMarker,部署包从 150.4 MB 降到 136.6 MB(c21ae8c)。
  • HTTPS 证书改为自动续期,数据库每天自动备份(c9c6f90);七牛 CDN 域名的证书也改为自动续期,过期证书每周清理,快到期时发邮件提醒(d4da815、8c07b0c、d2a64d4)。
  • 各应用改用只能访问自己数据库的独立账号(1501e87)。

九、2026 年 10 月(1—9 日):流萤打磨、炊想小程序与后台重做

10 月头九天共 62 条提交。

1. 流萤打磨与冷加载减半

  • 流萤的版式只做减法、照参考站恢复:两栏、横排文章卡、侧栏只留资料、正在做和标签;手机菜单改成右侧抽屉(1dbe39b、797aebb、8dafb9e)。
  • 冷加载减半:只有纸墨加载文楷字体,首屏大图预加载,评论照片按屏幕宽度取图(f45ae79);留言板冷加载从 7.3 MB 降到 0.9 MB,无障碍检查的问题清零(fa41f55)。
  • 36 篇文章里 190 张 CSDN 外链图恢复显示,手机滚到留言板顶部回到 60 帧(b54ed68);iPhone 上点抽屉外面关不掉菜单、输入框聚焦时整页放大,也一并修好(1bc614f)。
  • 明暗切换恢复“太阳落下、月亮升起”的天空动画,改由合成线程播放,切换时不再卡(506f9a6)。

2. 分享海报与代码块

  • 分享海报和弹窗重做,中文断行、括号与标点悬挂又修了一轮,封面最多等 6 秒(c79a4fa、71e5380)。
  • 代码块里每行多出来的一截底色去掉了,折叠代码块底部的渐隐和“展开全部”条跟着代码块底色走(d626477、274d137)。
  • 正文里裸写的网址遇到全角标点就收住,不再把后面的标点和正文吞进链接(a201b4e)。
  • 新主题的代码块其实一直没有高亮:站点的 highlight.js 是 v9,只有 highlightBlock,而新主题只认 v11 的 highlightElement,代码颜色全靠发布时存进正文的那一份。补上两种写法都认之后,代码块恢复了语法高亮(dde4cf3)。

3. 炊想小程序

10 月 5 日,“炊想”小程序的后端上线,博客后台随之多了一个《小程序管理》(d2ab4b2、519344e、581cc2a),首页“正在做”和小程序码也换成了炊想(09e08a1、d358869、076a382)。之后两天,会员卡与次数包、一周菜单、操作日志、用户详情和调用记录陆续接进后台(35c5bcd、2eebb80、180bb47、a289b6a),10 月 7 日又加了“改一改这道菜”“请客菜单”和“家里的厨具”(cfbe33d),并做了一轮走查修复(c2d2160)。当天晚些时候,五十道常见家常菜提前搭好(3464b1b),全部提示词排查优化了一轮——换一版会参照上一版换做法、成品图按食材外形描述、会员换图可以写不满意的原因(e75c68f、51866b6);会员调价为月卡 ¥18、季卡 ¥45,并给出图功能加了整期上限(a71a1d1)。这几条是小程序后端的提交,不计入本文的 blog 提交统计。

10 月 8 日,小程序加了“我的订单”:会员卡和次数包的订单按待支付、已支付、已关闭分组,付款时中途退出的订单保留 2 小时,可以接着付或取消,超时由定时任务先向支付平台查单、确实没付才关成“超时未支付”,关单后才到账的照常发货;意见反馈支持管理员回复,用户在“我的反馈”里能看到处理状态和回复,有新回复时“我的”页亮红点。博客后台的《小程序管理》同步跟上:订单页加了超时未支付、已取消的筛选和关闭时间,已关闭的订单也能查单补发;反馈页每条都能回复、改回复,并显示用户是否已看(c11143e)。同一天实测搭配、改一改、排菜单和冰箱的完整流程后,请客菜单的道数改为不含主食——主食另配一道,热菜至少占一半(4ac5297);菜单接口带上这 24 小时的用量,菜单页直接写着还能排几份、用完几点后再来(3661480)。其中 c11143e 改到了博客后台,计入 blog 统计;另外两条是小程序后端的提交。小程序当天连发 2.0.14、2.0.15 两版,订单、反馈回复和这一轮的体验修正都已上线。

10 月 9 日盘点上线以来的数据:三十来个陌生访客打开过小程序,却没有一个人走到注册那一步——核心功能要先用邮箱注册,在微信里这道门槛几乎劝退了所有人。于是加了免注册直接试用:打开小程序时凭微信身份开一个试用账号,首页直接能搭配,以后绑定邮箱原地转正,记录和次数都保留;同时加了分享邀请(从朋友分享的链接第一次进来,双方各得 1 次)和转化埋点,《小程序管理》概览多了一张「拉新漏斗」,从打开、看菜谱、点搭配到注册,每一步流失多少一眼看清,用户列表里也标出游客和受邀用户(0ff865f、6ec3cac,改到了博客后台,计入 blog 统计)。这一版是 2.0.16,已提交审核。随后小程序又做了一轮视觉精修(2.0.17):全部 emoji 换成同一套线性图标,菜名和标题改用宋体,橙色只留给主按钮,首页第一屏加了一张每天换一道的「今晚吃这个」大图——这些是小程序仓库的提交,不计入本文统计。

10 月 10 日到 13 日,小程序的登录又改了两轮:先把「微信一键登录」放到最前面,免注册试用随之退场(2.0.17);13 日索性只留微信一键登录,注册、找回密码、改密码三页删掉,邮箱改成「我的」里可选绑定——填邮箱、收个验证码就绑好;以前用邮箱注册的老用户,验证原来的邮箱就回到自己的账号。分享邀请从双方各得 1 次改为各得 10 次,「我的」里还能看到请来了哪几位朋友(2.0.18)。随后的 2.0.19 逐页检查了图标、箭头和文字的对齐,删掉一批重复的文字提示——按钮状态自己会变的操作不再另弹提示,和标题、对比表重复的说明也拿掉了;点功能时被请去登录的,登录页会说一句「登录后接着刚才的操作」。两版都已上线。这些是小程序前后端的提交,不计入本文的 blog 提交统计。

4. 评论:外链与 AI 上下文

  • 评论里除表情包、留言上传的照片和本站链接外,其他外链一律拒绝;超过 4 张图片也直接拒绝(3e65f84、885b576)。
  • AI 回复取整个楼层作为上下文,多人、多层的回复链不再断(885b576)。
  • 点开大图时才去取原图,页面上仍是缩略图;评论和留言里的图片只在同一楼里左右切换(783a533)。

5. 后台重做

10 月 7 日,后台的排版和界面整体重做:浅色侧栏、手机上的底部导航和抽屉、表格在手机上变成卡片列表、弹窗从底部弹出,各主题的后台样式只改颜色和圆角这些令牌(3da4026)。侧栏按“内容 / 站点 / 小程序 / 系统”重新归类(768d12c),评论页、标签、分类、设置和提示条这些页面细节也一起改了,顺手修掉了“点删除再取消、再保存会覆盖那一条”的问题(187bad9)。

6. 10 月 7—8 日:首页“正在做”、流萤巡检与天气

  • 首页小程序码原本放在隐藏的弹窗里,loading="lazy" 拦不住,每次进首页都白下一张 90 KB 的图,改成指到入口或打开弹窗时才取;后台文章列表、仪表盘只取摘要字段,RSS 查询去掉 Markdown 和 GROUP BY,本地同库实测从 60~70 毫秒降到 10 毫秒以内;分享配图在 nginx 加了独立缓存,不再每次回源七牛缩放(0fb4430)。
  • 首页“正在做”调整了顺序,个人简历提到第三个(623cd3d);除炊想外的 9 个项目也各画了一枚同风格的应用图标,不再是线条字;流萤左栏天气卡的单色图标换成 16 枚彩色天气插画,按天气代码选用(5f7b239)。
  • 流萤巡检一轮:手机上往下读时收起音乐和快捷按钮,往上滚再出现;404 页按流萤重做;打赏按钮换成微信、支付宝标志;上一篇 / 下一篇卡片带封面;搜索弹层加了热门标签和最近 5 篇;天气能定位到区县时显示“衡阳·雁峰区”这样的区县名(ef5960f)。随后修了手机上搜索弹层被长标题撑宽、小屏底边出屏的问题(ce86a5e)。
  • 心知天气的 403 不只表示“不覆盖这个地点”,访问频率超限、余额不足也是 403;以前一律按不覆盖缓存 6 小时,一阵集中请求触发限频后,广州、北京、上海等地的访客整段时间看不到天气。现在只有真正不覆盖的才长缓存,其余 403 等 30 秒再试(cf07835)。

7. 10 月 8—9 日:一次 XSS、前端去重与大图查看器

  • 存储型 XSS:文章页评论的表情解析会先把 &lt; &gt; 解码再写回页面,服务端存成转义文字的 <img onerror=…> 就这样变回了真标签,首屏评论、展开的回复、发评论后的刷新三处都会触发。评论照片和表情包在服务端渲染时已经还原成图片,这一步解码是多余的,删掉即可(fdcf974)。
  • 前端重复实现合并成一份:文章页和留言板的评论脚本原来各有一套拷贝,合并成 comment-core 等七个按功能拆开的脚本,两页的差别只留在配置里;云笺的旧模板改用共用片段,五套新主题里几乎一样的代码高亮、计时、菜单开合合进 theme-kit.js;三处一模一样的大图、审核提示样式(75 条规则)合并成一份。合并时顺手修了一串小问题,比如留言板回复弹窗关闭时误解绑页面其他监听、手机上回复弹窗不锁背景滚动(4add936)。
  • 脚本按功能命名、删掉从没生效的代码:pinghsu-<页面>-<编号>.js 改名成 article-*、comment-*、guestbook-*;每日一句、「在一起」计时从两份合成一份,首页的每日一句从请求两次变成一次;从没调用过 init 的 InstantClick、一直是空列表的旧目录等一并删掉;浏览器回归脚本收进 tools/ui-check,改前改后逐元素比样式(f449363)。
  • AI 评论服务拆分:AiCommentServiceImpl 从 2893 行拆到 1080 行,提示词、上下文、图片挑选、回复校验、失败归类、邮件通知各自成类;拆分前后两份实现跑了 34 个场景,比对上游请求体、返回值、邮件和状态变更,全部一致(a4a9187)。
  • 流萤的大图查看器和流程图全屏换了一套外观:深色底带主色光晕,左右切换是毛玻璃方块,多了「2 / 6」计数和一条按进度露出的流萤彩虹;交互不变,其它五套主题不受影响(852b3d9)。

十、完整提交分布

下表列出原 blog 仓库全部 431 条提交,以及 total 仓库中 378 条 blog 相关提交(含迁移提交)的月份分布。正文里的阶段划分都以这些完整记录为依据,而不是只挑了少数提交。

月份 提交数 月份 提交数
2023-01 4 2023-02 2
2023-03 9 2023-04 15
2023-05 2 2023-06 5
2023-07 3 2023-08 3
2023-11 7 2023-12 1
2024-06 14 2024-07 50
2024-08 9 2024-09 6
2024-10 2 2024-11 1
2025-03 2 2025-04 1
2025-05 5 2025-06 31
2025-07 37 2025-08 24
2025-09 3 2025-11 1
2025-12 5 2026-01 13
2026-02 31 2026-03 118
2026-04 22 2026-05 2
2026-06 3 2026-07(total) 84
2026-08(total) 68 2026-09(total) 164
2026-10(total) 62

十一、回头看

从 2023 年的第一条提交到 2026 年 10 月,博客的变化可以归纳为五条主线:

  1. 内容能力:从文章、分类和标签,发展到搜索、归档、分享卡片、图表渲染和搜索引擎收录。
  2. 互动能力:从基础评论,发展到嵌套回复、审核、邮件、表情、弹幕、照片、楼层定位和 AI 回复。
  3. 工程能力:从单体独立部署,发展到缓存、安全治理、异常降级、多模块聚合交付,以及自动化的证书、备份和测试。
  4. 性能与体验:从“能打开”到“打开得快、读得舒服”——压缩图片、裁剪字体、按需加载、暗色主题、六套可切换的主题,以及移动端的每一处细节。
  5. 个人表达:天气、音乐、纪念日、每日一句、友链和这份长期更新的记录,让它始终是一个个人博客,而不是一套通用的后台系统。

这份历史里有大量看似很小的提交:一个按钮的位置、一处移动端溢出、一次评论定位、一种暗色文字颜色、一个第三方接口的兜底。真正让项目从“能运行”走向“长期可用”的,恰恰是这些持续发生的小修正。

并入 total 之后的提交还多了一样东西:证据。提交说明开始写清楚为什么改、改完怎么验证——实测的加载时间、对比度和数据库执行计划,以及问题复发时能第一时间报错的契约测试。

Git 记录下的不只是功能数量,也记录了关注点的变迁:先解决有没有,再解决好不好用;先把页面做出来,再处理性能、安全、移动端和异常路径;接着让 AI 进入内容与互动;然后回过头来,把每一处已有的东西做扎实。

从 679a795 到 705b9b1,这是一次持续三年多、跨越两个仓库的演进,而且还在继续。

5 条评论

如果你觉得文章对你有帮助,那就请作者喝杯咖啡吧

评论区 5

头像
 5 条评论
召田最帥boy

吓哭 评论图片

召田最帅boy 博主

该文章由Claude基于所有Git提交记录撰写并发布songhua

召田最帅boy 博主

该文章由Codex基于所有Git提交记录所写

召田最帅boy 博主

말이 도쿄를 밟아 벚꽃을 구경하다

westiny

不愧是你啊