← 返回目录

第 10 卷

第 10 / 21 卷日期:

  • 本地DNS服务器会先检查自身缓存,若有未过期的解析结果,直接返回IP;

• 若本地DNS无缓存,会作为“中转节点”,向远程的高层级DNS服务器(根DNS、顶级DNS、权威

DNS)发起请求,协调完成后续解析流程。

  1. 根DNS服务器解析(最高层级,指向顶级DNS)

本地DNS服务器向根DNS服务器发起请求(根DNS全球共13组,通过任播技术实现全球分布式部署):

• 根DNS服务器不存储具体的“域名-IP”映射,仅负责识别域名的“顶级域”(如

www.baidu.com 的顶级域是 .com),并返回该顶级域对应的“顶级DNS服务器”IP地址;

  • 例如,根DNS收到 www.baidu.com 的解析请求后,会返回 .com 顶级DNS服务器的IP。
  1. 顶级DNS服务器解析(指向权威DNS)

本地DNS服务器拿到顶级DNS服务器的IP后,向顶级DNS服务器发起请求:

• 顶级DNS服务器负责管理对应顶级域下的所有二级域名(如 .com 顶级DNS管理所有 xxx.com 域

名),会识别域名的“二级域”(如 www.baidu.com 的二级域是 baidu.com),并返回该二级域对应的“权威DNS服务器”IP地址;

  • 例如, .com 顶级DNS收到请求后,会返回 baidu.com 对应的权威DNS服务器IP。
  1. 权威DNS服务器解析(最终结果,返回IP)

本地DNS服务器拿到权威DNS服务器的IP后,向权威DNS服务器发起请求:

• 权威DNS服务器是域名的“最终解析源”,存储了该域名的完整“域名-IP”映射记录(由域名所有

者配置,如百度将 www.baidu.com 解析到 180.101.49.11);

  • 权威DNS服务器将目标域名对应的IP地址返回给本地DNS服务器;

• 本地DNS服务器收到IP后,会将该“域名-IP”映射缓存到本地(按TTL设置缓存时间),同时将IP

返回给浏览器。

7. 解析完成:进入页面加载流程

浏览器拿到IP地址后,DNS解析过程正式结束,后续进入“建立TCP连接→发起HTTP请求→接收响应 →资源加载→页面渲染”的核心流程(对应第2问的详细内容)。

✅ 核心要点总结

  1. DNS解析的核心逻辑是“缓存优先,层层递进”:从浏览器缓存→系统缓存→本地DNS缓存,再到

远程的根DNS→顶级DNS→权威DNS,每一步都优先使用缓存结果,大幅提升解析效率;

  1. 什么是DNS预解析(DNS Prefetching)?在前端优化中如何应用它?

DNS预解析(DNS Prefetching)是一种前端性能优化技术,核心原理是“在浏览器需要使用某个域名的IP前,提前发起DNS解析并缓存结果”,避免在用户触发访问时才进行DNS解析导致的延迟。由于

DNS解析(尤其是首次解析)可能耗时数百毫秒,预解析可将这部分耗时“提前”,缩短页面资源加载的整体时间,提升用户体验。

一、DNS预解析的核心作用

• 减少资源加载延迟:页面中通常包含多个不同域名的资源(如CDN资源、第三方插件、图片服务器

等),提前解析这些域名的DNS,可让浏览器在加载资源时直接使用缓存的IP,无需等待解析完成,减少“解析耗时+连接建立耗时”;

• 不阻塞页面渲染:DNS预解析是浏览器的“后台异步操作”,不会阻塞页面的解析和渲染,在页面

空闲时即可进行,充分利用空闲时间提升后续加载效率;

• 提升弱网络场景体验:在高延迟、弱网络环境(如移动端),DNS解析耗时占比更高,预解析能更

明显地改善资源加载速度。

二、前端优化中的应用方式(3种核心方案)

  1. 标签主动触发预解析(最常用,精准控制)

通过在HTML的 <head> 标签中添加 <link rel="dns-prefetch" href="域名"> 标签,主动告诉浏览器需要预解析的域名:

写域名,无需具体资源路径);

• 使用场景:提前解析页面中明确需要加载的跨域域名(如CDN域名、第三方图片服务器域名、视频

服务器域名);

• 示例:页面需加载 https://cdn.example.com/style.css 和

https://img.example.com/banner.jpg,可提前预解析两个域名:

Code block

1<head> 2<!-- 预解析CDN域名 -->

4<!-- 预解析图片服务器域名 -->

主流浏览器(Chrome、Firefox、Safari)具备“自动DNS预解析”功能,会自动解析页面中出现的域名(如 <a> 标签的 href、 <img> 标签的 src、CSS中的 background-image 等):

  • 触发时机:浏览器解析HTML/CSS时,遇到域名就会在后台异步预解析;

• 注意事项:部分浏览器可能对HTTPS域名的自动预解析支持有限,或需要手动开启(如早期

Chrome版本);若页面中存在大量不必要的域名,自动预解析可能消耗额外网络资源,可通过配置禁用。

  1. 动态触发预解析(针对动态加载资源)

对于通过JavaScript动态加载的资源(如点击按钮后加载的弹窗图片、异步加载的第三方插件),浏览器无法提前自动解析对应的域名,需通过JavaScript动态创建 dns-prefetch 标签触发预解析:

• 适用场景:动态加载的跨域资源、用户交互后才会加载的资源(如分页加载的图片、按需加载的组

件);

• 示例:动态预解析 https://dynamic.example.com 域名:

Code block

1// 动态创建dns-prefetch标签 2function prefetchDNS(domain) {

3const link = document.createElement('link');
4link.rel = 'dns-prefetch';
5link.href = domain;
6document.head.appendChild(link);
7}

8

9//在页面空闲时触发预解析(针对动态加载资源)
10window.addEventListener('load', () => {
11prefetchDNS('https://dynamic.example.com');
12});

三、应用注意事项(避免过度优化)

  1. 仅预解析必要的域名:避免对无关域名或同域域名进行预解析(同域域名的DNS解析结果可复用,

无需重复预解析),过度预解析会消耗额外的网络资源和浏览器性能;

  1. 优先预解析核心资源域名:优先预解析页面核心资源的域名(如核心CSS/JS的CDN域名、首屏图

片域名),非核心资源(如下拉加载的图片)可延迟预解析;

  1. 注意HTTPS域名的兼容性:部分老旧浏览器对HTTPS域名的DNS预解析支持不完善,可通过
全站分卷索引 · 21 卷
  1. 1第 1 卷
  2. 2第 2 卷
  3. 3第 3 卷
  4. 4第 4 卷
  5. 5第 5 卷
  6. 6第 6 卷
  7. 7第 7 卷
  8. 8第 8 卷
  9. 9第 9 卷
  10. 10第 10 卷
  11. 11第 11 卷
  12. 12第 12 卷
  13. 13第 13 卷
  14. 14第 14 卷
  15. 15第 15 卷
  16. 16第 16 卷
  17. 17第 17 卷
  18. 18第 18 卷
  19. 19第 19 卷
  20. 20第 20 卷
  21. 21第 21 卷