阅读 330

性能优化第02期 - DNS域名解析及其优化

本文正在参与 “性能优化实战记录” 话题征文活动

IP地址和域名

  • IP地址

    互联网协议地址(Internet Protocol Address),是 IP 协议提供的统一地址格式

    计算机之间想要实现相互通信,就必须要有唯一的网络地址标识,即 IP 地址;每台连网计算机都依靠 IP 地址来互相区分、相互联系

  • 域名

    域名和 IP 地址一样都是用来做网络地址标识的,相对于 IP 来说域名更便于用户记忆

  • 域名和IP地址的关系

    在互联网上,域名和 IP 地址之间是一对一多对一的关系,也就是说一个 IP 地址可以对应多个域名,但一个域名只能有一个 IP 地址

  • 总结

    IP 地址是面向网络的,而域名则是面向用户的

    计算机之间网络通信只认 IP 地址,所以域名和 IP 地址之间的转换工作被称之为域名解析

    域名解析由专门的域名解析服务器来完成,即 DNS 服务器

DNS域名解析过程

当用户访问一个页面时,浏览器先检查 DNS 缓存中有没有被解析过的对应 IP 地址

如果有,则解析结束,建立 TCP 连接

如果没有,浏览器会检查操作系统的 hosts 文件,从中寻找对应的 IP 地址

如果有,则解析结束,建立 TCP 连接

如果没有,操作系统向本地域名服务器请求解析(这台服务器一般在所在城市的某个角落,距离比较近且性能相对较好)

如果有,则解析结束,建立 TCP 连接

如果没有,见下图所示(文字描述写不动啦。。。)

dns.jpg

DNS优化方案

  • HTTP页面自动解析

    在页面加载的过程当中,浏览器会自动将超链接 href 属性中的域名解析为 IP 地址

    注意:为了确保安全性,HTTPS 页面中不允许自动解析

  • HTTPS页面自动解析

    通过HTML标签方式

    <meta http-equiv="x-dns-prefetch-control" content="on">
    复制代码

    通过设置响应头的方式

    ctx.set('X-DNS-Prefetch-Control', 'on')
    复制代码

    on 表示开启,off 表示关闭

  • 手动解析

    <link rel="dns-prefetch" href="//file.cdn.com">
    复制代码

    开启指定域名的预解析功能,多用于优化 CDN 资源,推荐项目中使用

  • 总结

    DNS 请求消耗的带宽非常小,但延迟有点高,尤其是在手机网络上尤为明显,通过 DNS 预解析可以明显的减少一些延迟

    例如:可以减少用户点击链接时的等待时间

了解hosts文件

往期回顾

性能优化第01期 - 建立性能知识体系

文章分类
前端