网络性能优化:DNS解析、CDN加速、HTTP/2多路复用、预加载与预连接

技术领域 核心优化点 关键指标
DNS解析减少查询次数、预解析、使用HTTPDNS解析耗时<50ms
CDN加速边缘节点缓存、动态加速、智能调度首字节时间<200ms
HTTP/2多路复用单一连接并发请求、头部压缩、Server Push请求延迟降低30%~50%
预加载 & 预连接<link rel="preload/preconnect/dns-prefetch">关键资源加载提前200ms
1. 定位瓶颈 2. 分层排查 DNS优化 CDN优化 HTTP/2多路复用 预加载/预连接 3. 实施优化 4. 效果验证
面试加分姿势:回答网络优化问题时,先说明“前端网络优化是系统工程,需要从 DNS 解析到资源加载全链路分析”。使用 Lighthouse / WebPageTest 数据说话,明确给出优化前后的量化对比。
---

面试问答卡片

🎯 面试问题1:如何优化 DNS 解析时间?

面试官考察点:

  • 是否掌握 DNS 预解析、HTTPDNS 等实战手段
  • 能否区分不同场景下的优化优先级

回答框架:影响分析 → 通用方案(dns-prefetch / preconnect)→ 高级方案(HTTPDNS / 浏览器缓存 )→ 效果量化

简短示例回答:(85字)首屏依赖第三方域名解析,建议在 HTML head 添加 <link rel="dns-prefetch" href="//api.example.com">。对关键域名使用 preconnect 提前建立连接。如果解析自身耗时高,可接入 HTTPDNS 避免 Local DNS 劫持,实测解析耗时从 120ms 降至 30ms。

可能追问:① dns-prefetch 和 preconnect 的区别?② HTTPDNS 原理和落地问题?

避坑提醒:不要滥用 dns-prefetch,超过 4~6 个域名反而增加 CPU 负担;preconnect 会建立 TCP + TLS 连接,非关键域名慎用。

🎯 面试问题2:CDN 加速的关键配置和常见问题?

面试官考察点:

  • 是否理解 CDN 缓存策略、回源机制
  • 能否处理动态资源加速与缓存冲突

回答框架:静态资源(强缓存 + CDN 边缘缓存)→ 动态加速(DCDN / 全站加速)→ 缓存刷新策略 → 监控与容灾

简短示例回答:(95字)静态资源用七牛/阿里云 CDN,设置 Cache-Control: public, max-age=31536000 并开启 CDN 边缘缓存。动态接口通过 CNAME 解析到 DCDN 节点,配合智能路由降低回源延迟。上线前必须刷新 CDN 缓存,避免版本迭代后用户拿到旧资源。

可能追问:① CDN 命中率低如何排查?② 如何保证 CDN 回源高可用?

避坑提醒:不要设置过于激进的缓存时间导致资源更新不及时;建议使用文件指纹(hash)配合 max-age=1年,更新时更换文件名即可。

🎯 面试问题3:HTTP/2 多路复用如何提升性能?实际项目中如何发挥其优势?

面试官考察点:

  • 是否理解多路复用与队头阻塞的区别
  • 能否在项目中配合 Server Push / 域名合并落地

回答框架:原理(单一 TCP 连接并发流)→ 与传统对比(减少连接数、避免队头)→ 实践(域名收敛、Server Push)→ 限制(H2C、TLS 开销)

简短示例回答:(90字)项目由 HTTP/1.1 升级为 HTTP/2 后,将原有 10 个域名收敛为 2 个,利用多路复用减少连接数。关键 CSS/JS 通过 103 Early Hints 或 Server Push 提前推送。首屏加载时间从 2.8s 降至 1.9s,请求延迟降低 32%。

可能追问:① HTTP/2 的队头阻塞与 HTTP/3 区别?② Server Push 最佳实践与坑点?

避坑提醒:不要盲目使用 Server Push,服务器推送过多资源会占用带宽,反而拖慢首屏;建议只推送 1-2 个关键 CSS/JS。
💡 预加载 & 预连接面试补充:高频问题如“如何提前加载关键字体”可用 <link rel="preload" as="font" crossorigin>;“如何提前建立跨域连接”用 <link rel="preconnect" href="https://fonts.googleapis.com">。回答时强调“只预加载首屏关键资源,避免带宽竞争”。