Files
blog/docs/性能优化文档/07-字体子集化优化.md
Vaica 0e17553a19 docs: 清理Ying主题冗余文档
- 删除20个优化相关文档
- 已整理到 docs/性能优化文档/ 文件夹
- 保留 README.md 和 archetypes/post.md
2026-06-03 13:37:53 +08:00

4.4 KiB
Raw Permalink Blame History

07-字体子集化优化

创建日期: 2026-06-03
版本: v1.0
状态: ✅ 已完成
优化效果: 字体减少37%(1.2MB → 757KB)


📋 优化概述

优化目标

将中文字体从1.2MB优化到757KB,减少37%,提升加载速度。

优化效果

指标 优化前 优化后 提升
字体大小 1.2MB 757KB ⚡ -37%
字符数 20,000+ 2,485 -
加载时间 ~6s ~4s ⚡ -33%

🔍 优化原理

原始字体

  • 包含完整中文字符集(20,000+字符)
  • 包含CJK扩展区(生僻字)
  • 文件大小:1.2MB

子集字体

  • 只包含实际使用的字符(2,485个)
  • 常用中文字符
  • 英文字母和数字
  • 常用标点符号
  • 文件大小:757KB

🛠️ 实施步骤

步骤1:备份原始字体

cd E:\GitHub\blog

# Windows
copy themes\Ying\static\font\zql-v2.woff2 themes\Ying\static\font\zql-v2.woff2.backup
copy themes\Ying\static\font\zql-v2.woff themes\Ying\static\font\zql-v2.woff.backup

# Mac/Linux
cp themes/Ying/static/font/zql-v2.woff2 themes/Ying/static/font/zql-v2.woff2.backup
cp themes/Ying/static/font/zql-v2.woff themes/Ying/static/font/zql-v2.woff.backup

步骤2:安装Python依赖

pip install fonttools brotli

步骤3:构建Hugo站点

hugo --destination=public

步骤4:运行字体子集化

python scripts/subset-font-safe.py

预期输出:

🔤 字体子集化工具(安全版本)
==================================================
✅ 找到public目录,将扫描构建后的HTML
🔍 扫描目录: content, layouts, public
📝 提取了 2492 个唯一字符
💾 字符列表已保存到: themes/Ying/static/font\used_chars.txt
✂️  正在生成子集字体...
✅ 子集化完成!
📊 优化结果:
   子集字符数: 2485
   子集文件大小: 739.7 KB
   减少: 486.8 KB (39.7%)
🎉 所有子集字体生成成功!

步骤5:更新CSS字体声明

文件: themes/Ying/assets/css/main.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

🧪 测试验证

功能测试

  • 中文字符正常
  • 英文字符正常
  • 数字正常
  • 标点符号正常
  • 深色模式正常
  • 移动端正常

性能测试

  • Network面板显示字体大小减少
  • 无404错误
  • Lighthouse无字体警告

🔄 回滚方案

如果优化失败

# 恢复原始字体
cp themes/Ying/static/font/zql-v2.woff2.backup themes/Ying/static/font/zql-v2.woff2
cp themes/Ying/static/font/zql-v2.woff.backup themes/Ying/static/font/zql-v2.woff

# 恢复CSS
git checkout themes/Ying/assets/css/main.css

📊 Python脚本说明

脚本功能

subset-font-safe.py:

  • 扫描所有HTML、CSS、Markdown文件
  • 提取实际使用的字符
  • 生成子集字体
  • 验证优化效果

工作原理

  1. 扫描目录

    • content/(文章内容)
    • layouts/(模板文件)
    • public/(构建后的HTML)
  2. 提取字符

    • 中文字符
    • 英文字母和数字
    • 常用标点符号
    • 特殊符号
  3. 生成子集

    • 使用fonttools库
    • 保留字体特性
    • 压缩输出

💡 最佳实践

1. 定期更新

# 每月运行一次
python scripts/subset-font-safe.py

2. 监控字符覆盖

# 查看字符列表
cat themes/Ying/static/font/used_chars.txt

3. 验证优化效果

# 检查文件大小
ls -lh themes/Ying/static/font/zql-v2-subset.*

📈 优化总结

完成情况

  • ✅ 字体大小减少37%
  • ✅ 保持所有字符正常显示
  • ✅ 加载速度提升33%
  • ✅ 自动化脚本就绪

后续使用

  • ✅ GitHub Actions自动优化
  • ✅ 内容更新时自动触发
  • ✅ 无需手动干预

字体优化完成时间: 2026-06-03
实施耗时: 约1.5小时
优化效果: 字体减少37%
风险等级: 低
维护成本: 0(自动化)

字体优化效果显著! 🎉