搜索文章

×

输入关键词并回车进行搜索

{{/* ====== 优化后的JS加载策略(方案1:保守优化) ====== */}} {{/* ====== 1. 核心JS Bundle - 始终加载 ====== */}} {{ $iconfont := resources.Get "js/libs/iconfont.js" }} {{ $uikit := resources.Get "js/libs/uikit.min.js" }} {{ $viewimage := resources.Get "js/libs/view-image.min.js" }} {{/* Message.js(Qmsg)+ Toast 适配层放在 utils 之前,保证任何 toast 调用点执行时组件已就绪 */}} {{ $message := resources.Get "js/libs/message.min.js" }} {{ $toast := resources.Get "js/modules/toast.js" }} {{ $utils := resources.Get "js/modules/utils.js" }} {{ $loader := resources.Get "js/modules/loader.js" }} {{ $cache := resources.Get "js/modules/cache.js" }} {{ $search := resources.Get "js/modules/search.js" }} {{ $floatingTools := resources.Get "js/modules/floating-tools.js" }} {{ $nprogress := resources.Get "js/libs/nprogress.js" }} {{ $pjaxLib := resources.Get "js/libs/pjax.js" }} {{ $mypjax := resources.Get "js/modules/mypjax.js" }} {{ $pangu := resources.Get "js/modules/pangu.js" }} {{ $linkify := resources.Get "js/modules/linkify.js" }} {{ $shortcodesJs := resources.Get "js/shortcodes.js" }} {{ $lazyload := resources.Get "js/modules/lazyload.js" }} {{ $main := resources.Get "js/main.js" }} {{ $coreScripts := slice $iconfont $uikit $viewimage $message $toast $utils $loader $cache $search $floatingTools $nprogress $pjaxLib $mypjax $pangu $linkify $shortcodesJs $lazyload $main | resources.Concat "js/core.js" | resources.Minify | resources.Fingerprint }} {{/* ====== 2. 配置变量 ====== */}} {{/* ====== 3. 友链 / 友圈数据 —— 构建期快照,模板**不发网络请求** ====== */}} {{/* ★ 这里以前是 resources.GetRemote。它是在「每个页面的模板渲染过程中」同步发请求的, 而 footer 每页都要走一遍:构建节点(国内)到 api.200181.xyz(Cloudflare)一抖动, 两个拉取就会重试到撞穿 Hugo 的 partial 30 秒超时 → 整站构建失败、站点不更新 (2026-10-04 实测:WARN Links API fetch failed ... i/o timeout → ERROR render of "home" failed: partial "footer.html" timed out after 30s)。 现在改为读 data/ 下的本地快照,由流水线 stage 里的 scripts/fetch_snapshots.sh curl 落盘(见 .cnb.yml「Hugo 构建」)。快照缺失(本地预览 / 拉取失败)时 with 判空 → 渲染空数组,最坏只是评论区少了「友链 / 友圈」徽章,构建立马过。 */}} {{ $linkHosts := slice }} {{ $linkNames := slice }} {{ with site.Data.friend_links }} {{ range .links }} {{ $host := "" }} {{ with .url | urls.Parse }} {{ $host = .Host | strings.TrimPrefix "www." }} {{ end }} {{ $title := .name | default "" }} {{ if $host }} {{ $linkHosts = $linkHosts | append (dict "host" $host "title" $title) }} {{ end }} {{ if $title }} {{ $linkNames = $linkNames | append (dict "lower" (lower $title) "title" $title) }} {{ end }} {{ end }} {{ end }} {{ $feedHosts := slice }} {{ $feedNames := slice }} {{ with site.Data.friend_feeds }} {{ range .feeds }} {{ $host := "" }} {{ with .url | urls.Parse }} {{ $host = .Host | strings.TrimPrefix "www." }} {{ end }} {{ $title := .feedTitle | default "" }} {{ if $host }} {{ $feedHosts = $feedHosts | append (dict "host" $host "title" $title) }} {{ end }} {{ if $title }} {{ $feedNames = $feedNames | append (dict "lower" (lower $title) "title" $title) }} {{ end }} {{ end }} {{ end }} {{/* ====== 4. 页面特定JS - 按需加载 ====== */}} {{/* 文章详情页专用JS */}} {{ if .IsPage }} {{/* 友链申请弹窗放最前:artalk.js 渲染申请卡片时会调 window.flApplyOpenModal */}} {{ $friendlink := resources.Get "js/modules/friendlink.js" }} {{ $artalkModule := resources.Get "js/modules/artalk.js" }} {{/* 人机验证控件(Turnstile 风格),文章页与留言页共用 */}} {{ $human := resources.Get "js/modules/human.js" }} {{ $paragraphComments := resources.Get "js/modules/paragraph-comments.js" }} {{ $reward := resources.Get "js/modules/reward.js" }} {{/* 老朋友自动填充:填邮箱带出上次的昵称/网址 */}} {{ $autofill := resources.Get "js/modules/comment-autofill.js" }} {{/* 匿名评论开关 + 表情包最近使用 */}} {{ $anon := resources.Get "js/modules/comment-anonymous.js" }} {{ $emoRecent := resources.Get "js/modules/emoticon-recent.js" }} {{/* 走心评论:管理员「精选」按钮 */}} {{ $feat := resources.Get "js/modules/comment-featured.js" }} {{ $pageScripts := slice $friendlink $autofill $anon $emoRecent $feat $artalkModule $human $paragraphComments $reward | resources.Concat "js/page-only.js" | resources.Minify | resources.Fingerprint }} {{ else }} {{/* 非文章页面:仍然计算URL,但不加载,用于PJAX动态加载 */}} {{ $friendlink := resources.Get "js/modules/friendlink.js" }} {{ $artalkModule := resources.Get "js/modules/artalk.js" }} {{/* 人机验证控件(Turnstile 风格),文章页与留言页共用 */}} {{ $human := resources.Get "js/modules/human.js" }} {{ $paragraphComments := resources.Get "js/modules/paragraph-comments.js" }} {{ $reward := resources.Get "js/modules/reward.js" }} {{ $autofill := resources.Get "js/modules/comment-autofill.js" }} {{ $anon := resources.Get "js/modules/comment-anonymous.js" }} {{ $emoRecent := resources.Get "js/modules/emoticon-recent.js" }} {{ $feat := resources.Get "js/modules/comment-featured.js" }} {{ $pageScripts := slice $friendlink $autofill $anon $emoRecent $feat $artalkModule $human $paragraphComments $reward | resources.Concat "js/page-only.js" | resources.Minify | resources.Fingerprint }} {{ end }} {{/* 首页专用JS */}} {{ if .IsHome }} {{ if .Site.Params.infiniteScroll.enable }} {{ $infiniteScroll := resources.Get "js/modules/infinite-scroll.js" }} {{ end }} {{ end }} {{/* 特定页面专用JS */}} {{ if or (eq .Type "links") (eq .Type "circles") }} {{ $tiaozhuan := resources.Get "js/modules/tiaozhuan.js" }} {{ end }} {{/* ====== 5. 第三方脚本 ====== */}}