网站速度优化实践:CDN + 缓存策略最佳配置指南

网站加载速度直接影响用户体验、SEO 排名和转化率。数据显示,页面加载时间每增加 1 秒,转化率平均下降 7%。本文将分享经过多个项目验证的 CDN + 缓存优化方案。

一、性能基线测量

在开始优化前,先建立性能基线:

核心 Web 指标(Core Web Vitals)

指标 意义 目标值
LCP(最大内容绘制) 页面主要内容加载时间 < 2.5 秒
FID(首次输入延迟) 页面交互响应速度 < 100ms
CLS(累计布局偏移) 页面视觉稳定性 < 0.1

测量工具

  • LighthouseChrome DevTools 内置,给出具体优化建议
  • PageSpeed Insights:Google 官方工具,模拟真实用户环境
  • WebPageTest:多地点、多设备测试
  • GTmetrix:可视化性能报告

二、CDN 优化策略

2.1 选择合适的 CDN 配置

# Nginx 配置片段 - 针对 CDN 优化
# 开启 Brotli 压缩(比 Gzip 压缩率高 20-30%)
brotli on;
brotli_types text/plain text/css application/javascript application/json image/svg+xml;

# 设置缓存头
location ~* \.(jpg|jpeg|png|gif|ico|webp|svg)$ {
    expires 30d;
    add_header Cache-Control "public, immutable";
    add_header Vary "Accept-Encoding";
}

location ~* \.(css|js)$ {
    expires 7d;
    add_header Cache-Control "public, immutable";
}

location / {
    # HTML 不缓存或短时间缓存
    add_header Cache-Control "no-cache, must-revalidate";
}

2.2 缓存层级优化

合理的缓存策略需要多个层级配合:

浏览器缓存 → CDN 边缘节点缓存 → CDN 中间层缓存 → 源服务器
    ↓              ↓                    ↓                ↓
  短期缓存      长期缓存             短期缓存         实时数据

层级说明

  1. 浏览器缓存:通过 Cache-Control 和 Expires 头控制
  2. CDN 边缘节点:离用户最近的节点,存储热数据
  3. CDN 中间层:回源前的缓存层,减少源站压力
  4. 源服务器:最新数据的源头

2.3 CDN 预热

大更新后,提前通知 CDN 将内容缓存到边缘节点:

# Cloudflare 预热(通过 Cache Rules)
curl -X POST "https://api.cloudflare.com/client/v4/zones/{zone_id}/purge_cache" \
  -H "Authorization: Bearer {token}" \
  -H "Content-Type: application/json" \
  --data '{"prefixes":["https://example.com/assets/"]}'

三、缓存策略细节

3.1 静态资源缓存策略

资源类型 浏览器缓存 CDN 缓存 说明
图片(jpg/png/webp/avif) 30 天 30 天 文件名 hash 化
CSS 文件 365 天 365 天 带版本号或 hash
JavaScript 文件 365 天 365 天 带版本号或 hash
字体文件 365 天 365 天 预加载关键字体
视频文件 7 天 7 天 大文件考虑分片
HTML 页面 0 或不缓存 0-1 小时 需要实时更新

3.2 动态内容缓存

对于 API 响应,使用 CDN 缓存需要注意:

# 带认证的请求不缓存
location /api/ {
    if ($http_cookie ~* "session|token") {
        set $no_cache 1;
    }
    proxy_no_cache $no_cache;
    proxy_cache_bypass $no_cache;
}

# 对公开 API 设置短缓存
location /api/public/ {
    add_header Cache-Control "public, max-age=60";
}

四、图片优化(最关键)

图片占网页总大小的 60-70%,优化图片是性价比最高的加速手段:

4.1 图片格式选择

格式 压缩率 浏览器支持 适用场景
WebP 比 JPEG 小 25-35% 广泛支持 照片、复杂图片
AVIF 比 JPEG 小 50% 较新浏览器 照片、高压缩需求
SVG 无损 全部支持 图标、Logo、插图

4.2 图片 CDN 处理

使用 CDN 的图片处理功能:

<!-- Cloudflare Image Resizing -->
<img src="/cdn-cgi/image/width=800,quality=80,format=auto/photo.jpg" />

<!-- 阿里云图片处理 -->
<img src="/photo.jpg?x-oss-process=image/resize,w_800/quality,q_80/format,webp" />

4.3 懒加载

<!-- 原生懒加载(现代浏览器) -->
<img src="photo.jpg" loading="lazy" alt="..." />

<!-- 结合 Intersection Observer -->
<img data-src="photo.jpg" class="lazy" alt="..." />

五、性能优化进阶

5.1 HTTP/2 与 HTTP/3

  • HTTP/2:多路复用、头部压缩、服务器推送
  • HTTP/3:基于 QUIC 协议,连接建立更快、弱网环境更稳定

确保 CDN 和源服务器都开启 HTTP/2/3:

# Nginx 配置
listen 443 ssl http2;
listen 443 quic reuseport;

5.2 资源合并与压缩

将多个小文件合并,减少 HTTP 请求数:

# 合并 CSS
cat reset.css layout.css style.css > combined.css

# 使用构建工具(Webpack/Vite)自动完成

5.3 预加载关键资源

<!-- 预加载关键 CSS -->
<link rel="preload" href="critical.css" as="style" />

<!-- 预加载字体 -->
<link rel="preload" href="font.woff2" as="font" type="font/woff2" crossorigin />

<!-- 预连接第三方域名 -->
<link rel="preconnect" href="https://fonts.googleapis.com" />

六、移动端优化

移动端网络环境更复杂,需要额外优化:

  1. AMP(Accelerated Mobile Pages):Google 的移动端加速方案
  2. PWA(Progressive Web App):离线缓存 + 快速加载
  3. 响应式图片:根据屏幕尺寸加载不同大小图片
  4. 减少第三方脚本:第三方脚本是移动端性能杀手

七、性能优化检查清单

  • 启用 CDN 并正确配置缓存
  • 图片使用 WebP/AVIF 格式
  • 开启 Brotli/Gzip 压缩
  • 启用 HTTP/2 或 HTTP/3
  • 资源文件带版本号或 hash
  • 关键 CSS 内联加载
  • 非关键资源异步加载
  • 使用资源提示(preload/preconnect)
  • 启用浏览器缓存
  • 移除未使用的 CSS/JS
  • 减少重定向
  • 优化 TTFB(首字节时间)

八、总结

网站速度优化是一个持续的过程,不是一次性工作。CDN + 缓存 + 图片优化是投入产出比最高的三项优化措施,通常可以在短时间内看到显著效果。建议定期使用 Lighthouse 检测性能得分,持续迭代优化。