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

+11 -1
View File
@@ -42,7 +42,17 @@
<link rel="icon" type="image/x-icon" href="/favicon.ico">
<!-- Resource Hints -->
<link rel="preconnect" href="https://cravatar.cn">
{{ with site.Params.rssapi.base }}<link rel="preconnect" href="{{ . }}">{{ end }}
{{- /* 评论 / RSS API:Artalk 与友链数据都发 CORS 跨域请求。
preconnect 必须带 crossorigin —— 浏览器对「带凭据」和「匿名」两条连接分池,
不带 crossorigin 预热的连接 CORS 请求无法复用,等于白预连(net::ERR 之外
还要重付一次 DNS + TCP + TLS)。dns-prefetch 兜底不支持 preconnect 的浏览器。 */ -}}
{{- $apiHosts := slice -}}
{{- with site.Params.artalk.server }}{{ $apiHosts = $apiHosts | append (strings.TrimSuffix "/" .) }}{{ end -}}
{{- with site.Params.rssapi.base }}{{ $apiHosts = $apiHosts | append (strings.TrimSuffix "/" .) }}{{ end -}}
{{- range ($apiHosts | uniq) }}
<link rel="preconnect" href="{{ . }}" crossorigin>
<link rel="dns-prefetch" href="{{ . }}">
{{- end }}
{{ with site.Params.rssapi.base }}<script>window.rssApiBase = "{{ . }}";</script>{{ end }}
<link rel="dns-prefetch" href="https://bsz.dusays.com:9001">
<!-- Analytics -->