perf(comments): 评论加载提速 + 骨架屏 + 友链弹窗 pjax 修复 + toast 统一 Message.js

优化:
- initArtalk 加节点级幂等守卫(mount.__atkInited,失败回滚),
  消除 artalk.html/mypjax 多入口导致的 4× comments + 4× pv 重复请求
- fetch 包装层对无 body 的 GET/HEAD 去掉多余 content-type,
  消掉 Artalk 对 GET /comments 的 CORS 预检(按完整 URL 缓存,
  每篇文章都重付一次 RTT)。实测评论列表 +1150~1565ms → +626ms

修复:
- 评论列表骨架屏改注入 .atk-list-body(原骨架在 #Comments 内,
  被 Artalk.init 清空),list-loaded/故障/12s 兜底移除
- 友链申请弹窗抽成 modules/friendlink.js 进 page-only bundle
  (原内联脚本在 #pjax-container 外,pjax 后 flApplyOpenModal 未定义)
- toast 统一走本地化 Message.js/Qmsg 适配层(保留 window.Toast/showToast 旧 API)

文档:
- README / 架构总览 更新;新增 评论加载优化方案.md
This commit is contained in:
zqlit committed 2026-10-04 15:00:52 +08:00
1 parent 9e972f2b61
commit 50a906e07c
14 files changed
+1018 -486

No files matched your search

+19
View File
@@ -54,6 +54,25 @@
: > "$CI_STATUS"
hugo version
# ── /conf 快照(评论首屏优化)────────────────────────────────────
# 构建期拉一次 Artalk 的 /conf 落到 data/,Hugo 会内联进每个页面。
# 前端据此对匿名 /conf 请求本地合成响应 —— Artalk 内部 conf 与评论列表
# 是严格串行的,省掉这一跳等于首屏少一整个跨境往返。
# 服务端这份 conf 只由 settings 表决定(唯一因人而异的 imgUpload 由前端
# 按登录态放行真实请求),所以匿名访客的快照人人相同。
# 拉取失败一律降级:删文件 → 模板不内联 → 前端自动走原生远程请求。
# 绝不让它拖垮构建(在 if 条件里失败不会触发 set -e)。
mkdir -p data
if curl -fsS --max-time 30 --retry 1 --retry-delay 2 \
"https://api.200181.xyz/api/v2/conf" -o data/artalk_conf.json \
&& python3 -c "import json;json.load(open('data/artalk_conf.json',encoding='utf-8'))"; then
echo "✅ conf 快照就绪 $(wc -c < data/artalk_conf.json | tr -d ' ') 字节"
else
rm -f data/artalk_conf.json
echo "⚠️ conf 快照拉取失败,已降级为运行时远程拉取"
fi
python3 scripts/add_draft_to_hidden.py
rm -rf public resources/_gen
hugo --minify --gc