1.
准备工作:复现并记录问题
操作步骤:先在不同网络环境复现场景(公司内网、手机 4G、家用宽带)。使用命令行和线上工具记录基线数据:curl -o /dev/null -s -w "%{time_starttransfer} %{time_total}\n" https://example.com,或使用 webpagetest.org、Lighthouse 生成报告。保存 TTFB、DOMContentLoaded、总加载时长、请求数与大小。
2.
确认 DNS 与 CDN 指向是否生效
操作步骤:用 dig 和 nslookup 检查 A/AAAA、CNAME 是否指向 CDN 提供商:dig +short example.com @1.1.1.1;dig +trace example.com。检查 TTL 是否过长导致老旧解析。若使用 CNAME 至 CDN,确认 CDN 边缘节点返回的 IP 与文档一致。
3.
查看响应头判断缓存命中率
操作步骤:curl -I -s https://example.com | egrep -i "cache|via|age|cf-cache-status|x-cache"。常见标识:CF-Cache-Status、x-cache: HIT/MISS。若大量 MISS,检查 Cache-Control、Set-Cookie、Vary 头是否阻止缓存。
4.
检查源站响应性能
操作步骤:直接绕过 CDN 访问源站(使用 curl --resolve 或临时修改 hosts):curl -I --resolve example.com:443:源站IP https://example.com。测量源站 TTFB,如果源站响应慢需从应用层/数据库/后端排查。
5.
分析静态资源是否被正确缓存
操作步骤:列出常见静态文件(.js .css .jpg .webp .woff2)并检查 Cache-Control:curl -I https://example.com/static/app.js。建议静态资源设置长缓存(immutable, max-age 31536000)并通过文件名指纹化管理更新。
6.
确认 CDN 配置项(Query String、Cookies、Headers)
操作步骤:在 CDN 控制台查看是否按 Query String、Cookie 或特定 Header 区分缓存。若默认不缓存带 query 的 URL 或携带 Cookie,将导致缓存率低。调整为忽略无关 query 或剥离不必要的 cookie。
7.
排查 TLS 与网络传输问题
操作步骤:用 openssl s_client -connect example.com:443 -servername example.com 查看 TLS 握手时延和证书链。用 traceroute / mtr 检查网络路径丢包与延迟。若到边缘节点延迟高,联系 CDN 提供商检查 POP 路由。
8.
检查压缩与协议(HTTP/2/3、Brotli)
操作步骤:curl -I -s --http2 https://example.com 查看是否使用 HTTP/2;在浏览器 DevTools network 中查看是否启用 brotli/gzip 压缩。若未启用,在 CDN/源站开启压缩并配置合适的 Content-Encoding。
9.
排查第三方脚本与阻塞资源
操作步骤:用 Chrome DevTools 的 Coverage/Performance 看哪些脚本耗时。禁用或延迟第三方广告、统计、聊天窗等可显著降低加载阻塞。转为异步加载、使用资源预加载或 CSP 限制。
10.
优化图片与字体加载
操作步骤:将图片转为 WebP/AVIF,使用 responsive srcset、lazy-loading。字体使用 font-display: swap,或把常用字体预载(preload)。在 CDN 设置图片优化与自动 WebP 转换。
11.
监控缓存命中率与日志分析
操作步骤:在 CDN 控制台查看缓存命中率、边缘命中与回源比例。若命中率低,导出访问日志或启用实时 logpull,统计带 query、带 cookie 的请求并制定路由规则。
12.
临时策略与回滚方案
操作步骤:若无法短期修复源站性能,可使用 CDN 的“缓存所有内容/延长 TTL/开启边缘计算(Edge Workers)”作为临时缓解,同时开启健康检查与限流,避免回源风暴。测试后逐步回滚。
13.
常用命令与对照示例
操作步骤(示例):curl -w "@-" -o /dev/null -s https://example.com <<<'\n{"time_starttransfer":"%{time_starttransfer}\n","time_total":"%{time_total}\n"}';openssl s_client -connect example.com:443 -servername example.com;mtr -rw example.com。把输出保存为日志便于对比。
14.
总结:排查思路流程化
操作步骤:1) 复现并记录基线;2) 检查 DNS/CDN 指向;3) 验证缓存头与命中;4) 直接测源站;5) 检查网络/TLS;6) 优化静态资源与第三方脚本;7) 监控并调整 CDN 规则;8) 部署临时缓解,持续回归。
15.
问:即使 CDN 命中率高,页面还是慢,最可能的原因是什么?
答:最常见的是首包(TTFB)被源站处理拖慢或页面内大量第三方脚本/渲染阻塞资源。检查 TTFB、x-cache/age 头确认边缘是否命中,再用 Performance 分析长任务与第三方请求,优先优化后端接口与减少阻塞脚本。
16.
问:如何快速确认是 CDN 问题还是源站问题?
答:直接绕过 CDN 访问源站(修改 hosts 或用 --resolve)测量 TTFB。如果绕过后的响应时间与通过 CDN 相近,说明源站是瓶颈;如果绕过快而通过 CDN 慢,说明 CDN 配置或路由问题。
17.
问:短期内提升用户感知速度有哪些优先级最高的改动?
答:第一优先:开启 CDN 缓存并确保静态资源长期缓存;第二:启用压缩(Brotli)、HTTP/2 或 HTTP/3;第三:异步加载/延迟第三方脚本;第四:图片懒加载与 WebP。配合监控逐步验证效果。