数据格式
评论数据存放在 COMMENTS_PATH(默认 comments/)目录下。
每篇文章一个聚合文件,而不是一条评论一个文件。原因:代理读下 N+1 请求成本太高,聚合成一个文件后读取成本与评论数无关。
文章文件
comments/<slug>.json:
未填写邮箱时,三个邮箱相关字段全部省略。
索引文件
comments/index.json:
索引只提供站点级计数,不参与评论读取。极端情况下它可能短暂落后于文章文件,以文章文件为准。
slug 规则
- 允许字符:小写字母、数字、
-、_、/ - 以字母或数字开头
- 最长 179 字符
- 禁止
..、禁止绝对路径 - 结尾的
.json会被剥离
widget 默认取 location.pathname 并按同一套规则规范化。
并发
写入使用文件 sha 做乐观锁。同一篇文章两条评论同时批准时,后者会遇到 sha 不匹配,服务端重读后重试(有限次)。
索引文件是独立写入,失败只记日志,不会让批准本身失败。
Git 历史永久保留
删除评论只删当前版本,Git 历史仍然存在。表单必须写明这一点,任何抓取仓库历史的人都能看到已删除内容。