本文根据两个仓库的完整 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页面加入缓存;fee7b57IP 属地显示具体到市;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、ea8c005IP 解析改为“有市到市、有省到省、都没有到国家”的逐级降级,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提交评论时实时展示审核状态;1f84be1AI 摘要支持 Markdown,同时给博主、博主夫人的评论加上身份标识。
AI 不再只是一个独立的聊天入口,而是进入了摘要、问答、评论审核与回复等多个环节。之后的提交反复调整模型、提示词和错误处理,重心从“能调用接口”转向“稳定可用”。
4. 公众号解锁:上线与撤下
3 月下旬,博客试行文章阅读限制:02e3781 为文章增加公众号引流,c10190b 把“查看全文”按钮接入公众号自动回复的验证码,51b0627 修复了直接修改浏览器 Local Storage 就能绕过验证的漏洞。这套机制运行了一个半月,5 月 11 日由 5aad567 移除。
5. 3 月底至 6 月:搜索、加载动画与 IP 定位
fbf5c82重构搜索框并高亮搜索结果,48d0cca重构搜索结果页;253a6e6IP 定位改为调用在线接口,本地 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:文章页评论的表情解析会先把
<>解码再写回页面,服务端存成转义文字的<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 月,博客的变化可以归纳为五条主线:
- 内容能力:从文章、分类和标签,发展到搜索、归档、分享卡片、图表渲染和搜索引擎收录。
- 互动能力:从基础评论,发展到嵌套回复、审核、邮件、表情、弹幕、照片、楼层定位和 AI 回复。
- 工程能力:从单体独立部署,发展到缓存、安全治理、异常降级、多模块聚合交付,以及自动化的证书、备份和测试。
- 性能与体验:从“能打开”到“打开得快、读得舒服”——压缩图片、裁剪字体、按需加载、暗色主题、六套可切换的主题,以及移动端的每一处细节。
- 个人表达:天气、音乐、纪念日、每日一句、友链和这份长期更新的记录,让它始终是一个个人博客,而不是一套通用的后台系统。
这份历史里有大量看似很小的提交:一个按钮的位置、一处移动端溢出、一次评论定位、一种暗色文字颜色、一个第三方接口的兜底。真正让项目从“能运行”走向“长期可用”的,恰恰是这些持续发生的小修正。
并入 total 之后的提交还多了一样东西:证据。提交说明开始写清楚为什么改、改完怎么验证——实测的加载时间、对比度和数据库执行计划,以及问题复发时能第一时间报错的契约测试。
Git 记录下的不只是功能数量,也记录了关注点的变迁:先解决有没有,再解决好不好用;先把页面做出来,再处理性能、安全、移动端和异常路径;接着让 AI 进入内容与互动;然后回过头来,把每一处已有的东西做扎实。
从 679a795 到 705b9b1,这是一次持续三年多、跨越两个仓库的演进,而且还在继续。

吓哭
该文章由Claude基于所有Git提交记录撰写并发布
该文章由Codex基于所有Git提交记录所写
말이 도쿄를 밟아 벚꽃을 구경하다
不愧是你啊