评论系统 Twikoo 好多 bug!被迫换成了 Waline

之前我博客的评论区一直用的是 Twikoo,数据放在 MongoDB Atlas 的免费云数据库里。
刚搭好时用着还行,但时间一长,小毛病就慢慢多起来了。免费的数据库经常会有冷启动,有时候点开文章,底下的评论区要转好几秒才出来;而且邮件提醒时不时就漏发,好几次别人在博客留了言,我过了好久才偶然看到。
既然我现在博客很多东西都在往 Cloudflare 上迁,我就想着干脆把评论系统也彻底换了。选了一圈,决定换成社区里基于 Cloudflare Workers + D1(SQLite)改造的 Waline。不用买服务器,直接白嫖 Cloudflare 的免费算力和分布式数据库,速度快,数据也都在自己手里。
本以为换个现成的系统挺快,结果实际迁移下来,还是折腾了大半夜。
难题一:数据搬家,旧评论一个都不能丢
换评论系统,首要任务肯定是要保住以前的留言。
博客留言板和文章底下积攒了几十条朋友们的真实留言,肯定不能直接丢掉。但把数据从 Twikoo 导出来后才发现,两边的格式完全对不上。Twikoo 导出来的是一堆文档数据,而 Waline 这边要求的是标准的表格结构,谁回复了谁都必须对好。
没办法,只能专门写了个小脚本去解析、转换格式,理清以前评论的楼中楼层级关系,最后批量写进 Cloudflare D1。好在 30 多条历史评论一条没漏,完好无损地搬进了新家。
难题二:头像全成灰色的了?
刚把新系统部署上去,打开前台一看,我直接愣住了:除了我自己有头像,其他所有留言的小伙伴,头像全都是灰色的默认图标。
查了一下发现,Waline 默认是走国外的 Gravatar 抓头像的。但国内大家写博客留言,留的基本上都是 QQ 邮箱,大部分人根本没有注册过 Gravatar,自然就只剩一张灰色默认图。
既然现在的后端代码完全跑在自己的 Worker 上,我就直接在后台加了一段判断:只要识别到是 QQ 邮箱,就直接调腾讯官方接口抓出高清 QQ 头像。改完一刷新,大家的头像瞬间全亮回来了,顺眼多了。
难题三:这玩意居然默认不能发邮件?
本以为换完之后配个邮箱账号就能收到通知,结果翻了源码才发现:这个 Worker 版本的 Waline,邮件通知功能压根还没做,官方文档里写着还是个“待办”状态。
评论系统收不到邮件提醒,那肯定不行,我总不可能天天自己登后台刷新看有没有新留言。
但在 Cloudflare Workers 这种无服务器环境里,很多现成的发信工具包根本塞不进去。折腾了一圈,最后利用 Cloudflare 底层的原生网络能力,直接连上我自己的域名邮箱(Purelymail)打通了发信流程。现在不管是新留言还是博主回复,两三秒内通知邮件就能稳稳送达。
难题四:时间错乱与发完不刷新
核心功能跑通后,在前台实测又抓到了两个影响体验的小 bug:
- 新评论插在半山腰:发了条新评论测试,刷新后它居然没排在最顶上,而是插在了历史评论的中间。后来发现是旧数据和新数据的时间格式不统一,导致系统排错了先后顺序,把时间格式规范化之后就修好了。
- 发送后页面不自动刷新:在前台发完评论提示成功,但列表里并没有立刻弹出来,必须手动按 F5 刷新才能看到。查了一下发现是前端客户端对接口返回的数据结构很挑剔,稍微调整了一下后端的返回字段,现在只要点击发送,新评论就能立刻顺滑地出现在最上方了。
总结
虽然中途排查各种小问题花了些时间,但改完之后的整体体验确实提升了一大截:
- 不用再忍受第三方免费数据库的冷启动延迟;
- 全站都在 Cloudflare 边缘网络上,打开非常顺畅;
- QQ 头像自动抓取,邮件通知秒级到达,发送即时上屏。
现在留言板和文章底部的评论区已经全面换成新的 Waline 了。大家有空可以在底下留个言测试一下,看看自己的头像有没有正常展示,顺便也可以体验一下邮件回复的速度 OωO!
支持与分享
如果这篇文章对你有帮助,欢迎分享给更多人或打赏支持!










