做前端性能优化时,经常会配置DNS预解析、预连接、资源预加载的标签,这些标签是如何起作用的,有哪些参数可以配置,本文做一个记录总结。
DNS预解析
基本语法:
1 | <link rel="dns-prefetch" href="//example.com"> |
DNS解析过程:
- 用户输入域名 → 浏览器检查本地DNS缓存
- 缓存未命中 → 向本地DNS服务器查询
- 递归查询 → 本地DNS服务器向根DNS服务器查询
- 返回IP地址 → 建立TCP连接
DNS预解析的作用:
- 在页面加载时并行进行DNS解析
- 当真正需要连接时,IP地址已经解析完成
- 减少DNS解析延迟(通常100-200ms)
预连接
基本语法:
1 | <link rel="preconnect" href="https://api.example.com"> |
预连接包含三个步骤:
- DNS解析:解析域名到IP地址
- TCP连接:建立TCP三次握手
- TLS协商:如果是HTTPS,进行TLS握手
预连接的作用:
- 提前建立完整的网络连接
- 减少连接建立时间(通常300-500ms)
- 特别适合HTTPS连接
合理使用策略
DNS预解析和预连接的合理使用策略:
1 | <!-- 1. 关键资源使用preconnect --> |
DNS预解析和预连接的核心原理:
- DNS预解析:提前解析域名,减少DNS查询时间
- 预连接:提前建立完整连接,减少连接建立时间
- 浏览器优化:利用空闲时间进行网络准备
- 用户体验:减少页面加载时的网络延迟
使用建议:
- 为关键资源使用preconnect
- 为一般资源使用dns-prefetch
- 避免过度优化,合理使用
- 监控实际效果,持续优化
这些技术通过提前进行网络准备,显著提升了网页的加载性能。
疑问:直接优化当前页面加载 or 优化外部资源加载
DNS预解析和预连接主要优化:
- 当前页面中的外部资源加载速度
- 页面加载过程中的后续请求速度
- 不是直接优化当前页面的初始加载
- 例外:在单页应用(SPA)中,DNS预解析和预连接可以优化页面切换速度
详细分析各种场景:
传统多页应用
1 | <!-- 页面A --> |
单页应用(SPA)
1 | // 用户从首页切换到用户页面 |
时间线分析
1 | // 页面加载时间线 |
总结
- DNS预解析和预连接主要优化外部资源加载,不是直接优化当前页面的初始加载
- 在单页应用(SPA)中,DNS预解析和预连接可以优化页面切换速度
- 间接提升了整体用户体验
- 减少了页面加载过程中的网络延迟
- DNS预解析和预连接优化的是页面加载过程中的资源请求速度,而不是页面本身的初始加载速度
资源预加载
基本概念
预加载是浏览器在页面加载时主动下载未来可能需要的资源,而不是等到真正需要时才下载。
基本语法
1 | <!-- 预加载关键资源 --> |
rel=”prefetch” vs rel=”preload”
特性 | preload | prefetch |
---|---|---|
优先级 | 高 | 低 |
用途 | 当前页面关键资源 | 未来页面可能资源 |
时机 | 立即加载 | 空闲时加载 |
带宽 | 抢占带宽 | 不抢占带宽 |
总结
预加载的核心原理:
- 浏览器主动下载未来需要的资源
- 利用网络空闲时间提前准备
- 减少用户等待时间
关键要点:
- preload:高优先级,立即加载
- prefetch:低优先级,空闲时加载
- 合理使用,避免过度预加载
预加载是现代Web性能优化的重要技术,通过提前准备资源显著提升用户体验。