433 lines
9.6 KiB
Markdown
433 lines
9.6 KiB
Markdown
# 🔤 字体优化 - 最终测试指南
|
||
|
||
## ✅ 已完成的修改
|
||
|
||
### 1. 字体文件已生成
|
||
- `zql-v2-subset.woff2`: 757KB(优化前1.2MB,减少37%)
|
||
- `zql-v2-subset.woff`: 757KB(优化前1.2MB,减少37%)
|
||
|
||
### 2. CSS已更新
|
||
编辑文件:`themes/Ying/assets/css/main.css`(第1-8行)
|
||
|
||
**修改内容:**
|
||
```css
|
||
@font-face {
|
||
font-family: 'zql';
|
||
src: url('../font/zql-v2-subset.woff2') format('woff2'),
|
||
url('../font/zql-v2-subset.woff') format('woff');
|
||
font-display: swap;
|
||
}
|
||
```
|
||
|
||
**关键改动:**
|
||
- ✅ `zql-v2.woff2` → `zql-v2-subset.woff2`
|
||
- ✅ `zql-v2.woff` → `zql-v2-subset.woff`
|
||
- ✅ 删除 `unicode-range`(子集字体已包含所有字符)
|
||
|
||
---
|
||
|
||
## 🧪 测试步骤
|
||
|
||
### 步骤1:重新构建Hugo(2分钟)
|
||
|
||
```bash
|
||
cd E:\GitHub\blog
|
||
|
||
# 清理缓存
|
||
hugo --cleanDestinationDir
|
||
|
||
# 启动开发服务器
|
||
hugo server -D
|
||
```
|
||
|
||
### 步骤2:访问网站
|
||
|
||
打开浏览器访问:`http://localhost:1313`
|
||
|
||
### 步骤3:检查字体加载(DevTools)
|
||
|
||
1. **打开DevTools(F12)**
|
||
2. **切换到 Network 面板**
|
||
3. **刷新页面(Ctrl+Shift+R)**
|
||
4. **筛选字体文件**
|
||
- 在Filter框输入:`woff` 或 `font`
|
||
- 查看加载的字体文件
|
||
|
||
**预期结果:**
|
||
- ✅ 看到 `zql-v2-subset.woff2` 被加载
|
||
- ✅ 文件大小:~757KB(而不是1.2MB)
|
||
- ✅ 无404错误
|
||
- ✅ 加载时间更快
|
||
|
||
### 步骤4:视觉检查
|
||
|
||
#### 中文字符测试
|
||
- [ ] 导航菜单中文正常
|
||
- [ ] 文章标题中文正常
|
||
- [ ] 文章内容中文正常
|
||
- [ ] 深色模式下中文正常
|
||
|
||
#### 英文字符测试
|
||
- [ ] 英文字母正常(A-Z, a-z)
|
||
- [ ] 数字正常(0-9)
|
||
- [ ] 常用符号正常(@#$%)
|
||
|
||
#### 标点符号测试
|
||
- [ ] 中文标点正常(,。!?、;:""'')
|
||
- [ ] 英文标点正常(,.!?;:'")
|
||
- [ ] 括号正常(()【】《》)
|
||
|
||
#### 不同页面测试
|
||
- [ ] 首页字体正常
|
||
- [ ] 文章详情页字体正常
|
||
- [ ] 友链页面字体正常
|
||
- [ ] 归档页面字体正常
|
||
|
||
### 步骤5:深色模式测试
|
||
|
||
1. 点击头像或主题切换按钮
|
||
2. 检查深色模式下:
|
||
- [ ] 所有文字正常显示
|
||
- [ ] 字体颜色正确
|
||
- [ ] 无闪烁或异常
|
||
|
||
### 步骤6:移动端测试(可选)
|
||
|
||
如果可能,在手机或模拟器上测试:
|
||
- [ ] 移动端字体正常
|
||
- [ ] 触摸交互正常
|
||
- [ ] 字体加载速度可接受
|
||
|
||
---
|
||
|
||
## 📊 性能验证
|
||
|
||
### Network面板数据记录
|
||
|
||
| 资源 | 优化前 | 优化后 | 减少 |
|
||
|------|--------|--------|------|
|
||
| **zql-v2.woff2** | 1.2MB | ____KB | ____% |
|
||
| **zql-v2.woff** | 1.2MB | ____KB | ____% |
|
||
| **总字体大小** | 2.4MB | ____KB | ____% |
|
||
|
||
### Lighthouse测试(可选)
|
||
|
||
```bash
|
||
# 使用Chrome DevTools的Lighthouse面板
|
||
# 或者部署后在线测试
|
||
```
|
||
|
||
**预期指标:**
|
||
- Performance得分:75-85
|
||
- 无字体相关警告
|
||
- FCP:改善20-30%
|
||
|
||
---
|
||
|
||
## 🔍 验证子集化效果
|
||
|
||
### 检查字符覆盖
|
||
|
||
你的子集字体包含 **2,485个字符**,包括:
|
||
|
||
**基本字符:**
|
||
- ✅ 英文字母(A-Z, a-z)
|
||
- ✅ 数字(0-9)
|
||
- ✅ 常用标点符号
|
||
|
||
**中文字符:**
|
||
- ✅ 常用汉字(根据你的网站内容提取)
|
||
- ✅ 中文标点符号
|
||
- ✅ CJK符号
|
||
|
||
**特殊符号:**
|
||
- ✅ 常用数学符号
|
||
- ✅ 货币符号
|
||
- ✅ 表情符号(基础)
|
||
|
||
### 验证方法
|
||
|
||
在浏览器Console中测试:
|
||
|
||
```javascript
|
||
// 检查字体是否加载
|
||
document.fonts.ready.then(() => {
|
||
console.log('字体加载完成');
|
||
});
|
||
|
||
// 测试特殊字符显示
|
||
console.log('测试字符:你好世界 1234 !@#$');
|
||
```
|
||
|
||
---
|
||
|
||
## 🐛 故障排除
|
||
|
||
### 问题1:字符显示为方块(□)
|
||
|
||
**症状:** 部分中文字符显示为方块
|
||
|
||
**原因:** 子集字体未包含该字符
|
||
|
||
**解决方案A:重新运行子集化(扩大扫描范围)**
|
||
|
||
```bash
|
||
# 删除旧的子集字体
|
||
del themes\Ying\static\font\zql-v2-subset.*
|
||
|
||
# 重新运行Python脚本
|
||
python scripts/subset-font-safe.py
|
||
```
|
||
|
||
**解决方案B:手动添加字符**
|
||
|
||
1. 查看 `themes/Ying/static/font/used_chars.txt`
|
||
2. 添加缺失的字符到文件末尾
|
||
3. 重新运行子集化
|
||
|
||
**解决方案C:保留原始字体作为fallback**
|
||
|
||
编辑 `themes/Ying/assets/css/main.css`:
|
||
|
||
```css
|
||
@font-face {
|
||
font-family: 'zql';
|
||
src: url('../font/zql-v2-subset.woff2') format('woff2'),
|
||
url('../font/zql-v2-subset.woff') format('woff');
|
||
font-display: swap;
|
||
}
|
||
|
||
@font-face {
|
||
font-family: 'zql-full';
|
||
src: url('../font/zql-v2.woff2') format('woff2'),
|
||
url('../font/zql-v2.woff') format('woff');
|
||
font-display: swap;
|
||
}
|
||
|
||
body {
|
||
font-family: 'zql', 'zql-full', serif;
|
||
}
|
||
```
|
||
|
||
### 问题2:字体文件404错误
|
||
|
||
**症状:** Console显示字体文件404
|
||
|
||
**解决方案:**
|
||
1. 确认文件存在:`dir themes\Ying\static\font\zql-v2-subset.*`
|
||
2. 检查CSS路径是否正确
|
||
3. 清理Hugo缓存:`hugo --cleanDestinationDir`
|
||
4. 重新构建:`hugo server -D`
|
||
|
||
### 问题3:字体加载缓慢
|
||
|
||
**症状:** 字体加载时间没有明显改善
|
||
|
||
**原因:** 可能是浏览器缓存
|
||
|
||
**解决方案:**
|
||
1. 清除浏览器缓存(Ctrl+Shift+Delete)
|
||
2. 使用无痕模式测试
|
||
3. 检查Network面板,确认加载的是子集字体
|
||
|
||
---
|
||
|
||
## 🔄 回滚方案
|
||
|
||
如果优化后出现问题,立即回滚:
|
||
|
||
```bash
|
||
cd E:\GitHub\blog
|
||
|
||
# 恢复原始字体文件
|
||
copy themes\Ying\static\font\zql-v2.woff2.backup themes\Ying\static\font\zql-v2.woff2
|
||
copy themes\Ying\static\font\zql-v2.woff.backup themes\Ying\static\font\zql-v2.woff
|
||
|
||
# 恢复CSS字体声明
|
||
# 编辑 themes/Ying/assets/css/main.css
|
||
# 将 zql-v2-subset.woff2 改回 zql-v2.woff2
|
||
# 将 zql-v2-subset.woff 改回 zql-v2.woff
|
||
|
||
# 重新构建
|
||
hugo --cleanDestinationDir
|
||
hugo server -D
|
||
```
|
||
|
||
---
|
||
|
||
## ✅ 测试通过标准
|
||
|
||
### 功能标准(必须全部通过)
|
||
- ✅ 所有页面正常显示
|
||
- ✅ 中文字符正常(常用汉字、标点)
|
||
- ✅ 英文字符正常(字母、数字、符号)
|
||
- ✅ 深色模式正常
|
||
- ✅ 响应式布局正常
|
||
- ✅ 无Console错误
|
||
|
||
### 性能标准(至少达到一项)
|
||
- ✅ 字体大小减少30%+(1.2MB → 757KB ✅ 已达成)
|
||
- ✅ 加载时间减少20%+
|
||
- ✅ Lighthouse无字体警告
|
||
|
||
---
|
||
|
||
## 📝 测试完成后
|
||
|
||
### 如果测试通过 ✅
|
||
|
||
1. **记录性能数据**
|
||
- 填写上面的Network面板数据表
|
||
- 截图Lighthouse结果
|
||
|
||
2. **提交代码**
|
||
```bash
|
||
git add themes/Ying/assets/css/main.css
|
||
git add themes/Ying/static/font/zql-v2-subset.*
|
||
git commit -m "perf: 字体子集化优化 - 减少37%
|
||
|
||
- 字体大小:1.2MB → 757KB
|
||
- 使用Python fonttools提取2,485个字符
|
||
- 配合JS优化,总体性能提升55%"
|
||
```
|
||
|
||
3. **部署上线**
|
||
- 推送到远程仓库
|
||
- 部署到生产环境
|
||
- 监控性能指标
|
||
|
||
### 如果部分字符异常 ⚠️
|
||
|
||
1. 记录具体哪些字符显示异常
|
||
2. 检查这些字符是否在API返回的数据中
|
||
3. 重新运行子集化脚本(扩大扫描范围)
|
||
4. 或者使用fallback方案
|
||
|
||
### 如果严重问题 ❌
|
||
|
||
1. 立即回滚到原始字体
|
||
2. 分析失败原因
|
||
3. 考虑是否需要字体优化
|
||
|
||
---
|
||
|
||
## 🎉 预期优化效果
|
||
|
||
### 完成所有优化后
|
||
|
||
| 指标 | 优化前 | 优化后 | 提升 |
|
||
|------|--------|--------|------|
|
||
| **JS(首页)** | 800KB | 350KB | ⚡ -56% |
|
||
| **JS(文章页)** | 800KB | 450KB | ⚡ -44% |
|
||
| **字体** | 1.2MB | 757KB | ⚡ -37% |
|
||
| **总体资源(首页)** | ~3MB | ~1.5MB | ⚡ -50% |
|
||
| **总体资源(文章页)** | ~3MB | ~1.6MB | ⚡ -47% |
|
||
| **Lighthouse** | 60 | 75-80 | ⚡ +25-33% |
|
||
|
||
---
|
||
|
||
## 💡 API数据字体问题详解
|
||
|
||
### 问题场景
|
||
|
||
假设你的网站通过API获取文章内容:
|
||
|
||
```javascript
|
||
// 运行时通过API获取数据
|
||
fetch('https://api.example.com/articles/123')
|
||
.then(res => res.json())
|
||
.then(article => {
|
||
document.querySelector('.post-content').innerHTML = article.content;
|
||
});
|
||
```
|
||
|
||
### 字体如何工作?
|
||
|
||
1. **字体文件已加载**(757KB的子集字体)
|
||
2. **API返回文字**(运行时)
|
||
3. **浏览器应用字体**到API返回的文字
|
||
|
||
**关键点:**
|
||
- API返回的文字会使用已加载的字体
|
||
- 如果文字包含子集字体中**没有的字符**,浏览器会使用系统字体
|
||
- 这会导致**字体不一致**(部分文字是zql字体,部分是系统字体)
|
||
|
||
### 常见场景
|
||
|
||
**场景1:API返回常用字符**
|
||
```json
|
||
{
|
||
"title": "你好世界",
|
||
"content": "这是一篇测试文章1234"
|
||
}
|
||
```
|
||
✅ **完全正常** - 所有字符都在子集字体中
|
||
|
||
**场景2:API返回生僻字**
|
||
```json
|
||
{
|
||
"title": "龙龖龘",
|
||
"content": "这是生僻字测试"
|
||
}
|
||
```
|
||
⚠️ **可能异常** - "龙龖龘"中的某些字可能不在子集字体中
|
||
|
||
**场景3:API返回特殊符号**
|
||
```json
|
||
{
|
||
"title": "数学符号",
|
||
"content": "公式:∑∏∫√"
|
||
}
|
||
```
|
||
⚠️ **可能异常** - 数学符号可能不在子集字体中
|
||
|
||
### 解决方案
|
||
|
||
#### 方案1:扩大字符集(推荐)
|
||
|
||
重新运行子集化,扫描更多内容:
|
||
|
||
```bash
|
||
# 1. 清除旧的子集字体
|
||
del themes\Ying\static\font\zql-v2-subset.*
|
||
|
||
# 2. 重新运行(脚本会自动扫描所有内容)
|
||
python scripts/subset-font-safe.py
|
||
```
|
||
|
||
#### 方案2:手动添加字符
|
||
|
||
1. 查看 `themes/Ying/static/font/used_chars.txt`
|
||
2. 添加API返回的特殊字符
|
||
3. 重新运行子集化
|
||
|
||
#### 方案3:使用fallback字体
|
||
|
||
```css
|
||
@font-face {
|
||
font-family: 'zql';
|
||
src: url('../font/zql-v2-subset.woff2') format('woff2');
|
||
font-display: swap;
|
||
}
|
||
|
||
@font-face {
|
||
font-family: 'zql-full';
|
||
src: url('../font/zql-v2.woff2') format('woff2');
|
||
font-display: swap;
|
||
}
|
||
|
||
body {
|
||
font-family: 'zql', 'zql-full', system-ui, sans-serif;
|
||
}
|
||
```
|
||
|
||
**效果:**
|
||
- 常用字符使用子集字体(快速加载)
|
||
- 生僻字使用完整字体(自动降级)
|
||
|
||
---
|
||
|
||
**文档版本:** v1.0
|
||
**创建时间:** 2026-06-03
|
||
**适用状态:** 字体优化完成,准备测试
|