--- title: 构建优化 icon: clarity:bundle-solid outline: 2 createTime: 2024/09/10 01:50:20 permalink: /guide/optimize-build/ --- ## 图片尺寸优化 在 Markdown 文档中通过 `![alt](url)` 或 `` 嵌入图片时,虽然能够正常显示内容,但潜在的布局稳定性问题往往被忽视。 ### 布局抖动问题分析 当图片体积较小或网络状况良好时,页面布局抖动并不明显。然而,面对大体积图片或较差的网络环境,图片加载过程中的布局重排问题就会凸显: 1. **加载前**:图片占位空间未被预留,后续内容向上挤压 2. **加载后**:图片突然占据空间,迫使后续内容重新排列 3. **用户体验**:频繁的布局变化导致视觉跳动和操作卡顿 ### 解决方案:预计算图片尺寸 根据 [MDN 文档](https://developer.mozilla.org/zh-CN/docs/Web/HTML/Element/img#height)的建议,同时指定 `height` 和 `width` 属性能够让浏览器提前计算图片宽高比,预留显示空间,从根本上消除布局偏移。 主题提供的自动化解决方案: ```ts export default defineUserConfig({ theme: plumeTheme({ plugins: { markdownPower: { imageSize: true, // 可选 'local' | 'all' }, } }) }) ``` **配置选项说明**: - `'local'` 或 `true`:仅为本地图片添加尺寸属性 - `'all'`:同时处理本地和远程图片资源 **实现机制**: - 构建时自动分析图片原始尺寸 - 为 `` 标签注入精确的 `width` 和 `height` 属性 - 基于图片宽高比预留显示空间 ::: important 性能注意事项 - 此功能仅在**生产环境构建**时生效,避免开发阶段性能损耗 - 使用 `'all'` 选项时会请求所有远程图片资源,可能显著增加构建时间 - 优化策略:并发请求 + 头部信息分析,在获取尺寸数据后立即终止连接 ::: ## 图标加载优化 ### Iconify 集成优势 主题深度集成 [Iconify](https://icon-sets.iconify.design/) 项目,提供超过 20 万枚图标的选择灵活性。虽然本地安装 `@iconify/json` 包需要约 70MB 存储空间,但实际构建时仅包含使用到的图标资源,实现按需加载。 ### 性能瓶颈与解决方案 **问题根源**: 图标按集合(collection)组织,每个集合包含 100-1000+ 个图标的 JSON 文件。当使用多个不同集合的图标时,频繁的 I/O 读取和 JSON 解析会产生显著性能开销。 **实际案例**: - 使用 54 个图标集合中的 160+ 个图标 - 初始构建:约 500ms 图标解析时间 - 用户体验:开发服务器启动缓慢 **缓存优化机制**: ```mermaid graph LR A[首次构建] --> B[解析使用图标] B --> C[生成缓存文件] C --> D[二次构建] D --> E[读取缓存] E --> F[20ms 完成加载] ``` **优化效果**: - 构建时间从 500ms 降至 20ms - 开发服务器启动速度显著提升 - 资源利用率最大化 ### 最佳实践建议 1. **图标使用规划**: - 优先选择同一集合内的图标 - 避免过度分散使用不同集合 2. **开发体验优化**: - 首次启动后缓存自动生效 - 新增图标时缓存智能更新 - 无需手动干预缓存管理 3. **生产构建保障**: - 缓存机制不影响最终输出 - 保持图标资源的按需加载特性 - 确保构建产物的最优体积 通过这两项优化措施,主题在保持功能丰富性的同时,确保了优秀的构建性能和运行时体验。