Compare commits

...

1 Commits

Author SHA1 Message Date
CI Bot 40c48c4610 fix(web): Google Fonts 非阻塞加载,避免境内访问挂起阻塞首屏与E2E load事件
CI/CD Pipeline / Check push changed paths (pull_request) Has been skipped
CI/CD Pipeline / Dedup Check - skip PR tests when covered by push pipeline (pull_request) Successful in 1s
CI/CD Pipeline / Build Staging Web Image (pull_request) Has been skipped
CI/CD Pipeline / Check if frontend-only change (pull_request) Successful in 1s
CI/CD Pipeline / Build Staging Worker Image (pull_request) Has been skipped
CI/CD Pipeline / Build Staging API Image (pull_request) Has been skipped
CI/CD Pipeline / Unit Tests (pull_request) Has been skipped
CI/CD Pipeline / Integration Tests (pull_request) Has been skipped
CI/CD Pipeline / PR Build API Image (pull_request) Has been skipped
CI/CD Pipeline / PR Build Worker Image (pull_request) Has been skipped
CI/CD Pipeline / Retag skipped Staging API Image (pull_request) Has been skipped
CI/CD Pipeline / Retag skipped Staging Web Image (pull_request) Has been skipped
CI/CD Pipeline / Retag skipped Staging Worker Image (pull_request) Has been skipped
CI/CD Pipeline / Deploy Staging (Watchtower auto-deploy) (pull_request) Has been skipped
CI/CD Pipeline / Staging E2E Tests (pull_request) Has been skipped
CI/CD Pipeline / ACR Image Cleanup (pull_request) Has been skipped
CI/CD Pipeline / Staging API Integration Tests (pull_request) Has been skipped
CI/CD Pipeline / Frontend Lint (pull_request) Successful in 2m4s
CI/CD Pipeline / Frontend Unit Tests (pull_request) Successful in 2m3s
PR Automation / Auto Approve on CI Green (pull_request) Successful in 2m14s
CI/CD Pipeline / PR Build Web Image (pull_request) Successful in 2m7s
Preview Deploy / Deploy Preview Environment (pull_request) Successful in 2m23s
CI/CD Pipeline / Validate - Style (pull_request) Successful in 5m5s
CI/CD Pipeline / Validate - Python (mypy + alembic) (pull_request) Successful in 5m43s
AI Code Review / AI Code Review (pull_request) Successful in 7m18s
PR Automation / Auto Merge on CI Green + Approved (pull_request) Successful in 11m5s
CI/CD Pipeline / Validate - Security (pull_request) Successful in 15m42s
CI/CD Pipeline / Build Production API Image (pull_request) Has been skipped
CI/CD Pipeline / Build Production Web Image (pull_request) Has been skipped
CI/CD Pipeline / Build Production Worker Image (pull_request) Has been skipped
CI/CD Pipeline / CI Gate (pull_request) Successful in 2s
CI/CD Pipeline / Deploy Production (pull_request) Has been skipped
CI/CD Pipeline / Canary Release to Production (pull_request) Has been skipped
CI/CD Pipeline / Production Browser E2E (pull_request) Has been skipped
ACR Cleanup / ACR Image Cleanup (pull_request_target) Successful in 4m4s
Preview Cleanup / Cleanup Preview Environment (pull_request) Successful in 4m28s
原 <link rel="stylesheet"> 是 render-blocking,fonts.googleapis.com 在境内阿里云
(E2E runner) 间歇性挂起 → 样式表加载不完 → page.goto 等 load 事件 90s 超时
→ E2E auth.spec/auth-guard/core-upload 连续 3 次 attempt 全挂,同时真实境内用户
首屏也可能白屏几十秒。

修复:使用 media="print" onload 非阻塞加载模式:
- <link rel="preload" as="style"> 低优先级预拉 CSS
- <link rel="stylesheet" media="print" onload="this.media='all'"> 初始只对 print media
  生效(不阻塞 screen 渲染/load 事件),JS onload 后切换为 all media 才应用字体
- <noscript> 降级:JS 禁用时仍阻塞加载(真实用户几乎都有 JS)
- 首屏使用系统字体兜底(PingFang SC / Microsoft YaHei / sans-serif),字体加载完自动切换
- E2E load 事件不再被 Google Fonts 拖死,无需改 Playwright 配置或测试代码

参考:https://web.dev/articles/defer-non-critical-css
2026-10-14 21:19:58 +08:00
+18 -4
View File
@@ -4,13 +4,27 @@
<meta charset="UTF-8" />
<link rel="icon" type="image/svg+xml" href="/vite.svg" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<!-- 标题字体(#2001 / #font-selection 修复):Google Fonts CDN 引入中文字体,保证优设标题黑/抖音美好体/阿里普惠体等fallback可用 -->
<link rel="preconnect" href="https://fonts.googleapis.com" />
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
<!-- 标题字体(#2001 / #font-selection 修复):完全非阻塞加载中文字体
- 使用 preload + 动态 rel 切换的"无阻塞字体加载"模式:
浏览器以 preload 低优先级拉取 CSS,不会阻塞 render/DOMContentLoaded/load 任一事件
- onload 后切换 rel=stylesheet 字体才生效,首屏用系统字体兜底(Noto Sans SC → PingFang SC → Microsoft YaHei → sans-serif)
- 解决境内访问 Google Fonts 挂起时首屏白屏 + Playwright load 事件超时(E2E 也受益) -->
<link
rel="preload"
as="style"
href="https://fonts.googleapis.com/css2?family=Noto+Sans+SC:wght@400;500;700;900&family=Noto+Serif+SC:wght@400;700;900&family=ZCOOL+KuaiLe&family=ZCOOL+XiaoWei&family=ZCOOL+QingKe+HuangYou&family=Ma+Shan+Zheng&family=Long+Cang&family=Liu+Jian+Mao+Cao&family=Zhi+Mang+Xing&display=swap"
rel="stylesheet"
/>
<link
rel="stylesheet"
href="https://fonts.googleapis.com/css2?family=Noto+Sans+SC:wght@400;500;700;900&family=Noto+Serif+SC:wght@400;700;900&family=ZCOOL+KuaiLe&family=ZCOOL+XiaoWei&family=ZCOOL+QingKe+HuangYou&family=Ma+Shan+Zheng&family=Long+Cang&family=Liu+Jian+Mao+Cao&family=Zhi+Mang+Xing&display=swap"
media="print"
onload="this.media='all'; this.onload=null"
/>
<noscript
><link
rel="stylesheet"
href="https://fonts.googleapis.com/css2?family=Noto+Sans+SC:wght@400;500;700;900&family=Noto+Serif+SC:wght@400;700;900&family=ZCOOL+KuaiLe&family=ZCOOL+XiaoWei&family=ZCOOL+QingKe+HuangYou&family=Ma+Shan+Zheng&family=Long+Cang&family=Liu+Jian+Mao+Cao&family=Zhi+Mang+Xing&display=swap"
/></noscript>
<title>小虾 SaaS - 自动化视频剪辑平台</title>
</head>
<body>