如何提升前端性能(1)——dns预解析

dns全称是:Domain Name System(域名系统),是域名和IP地址相互映射的一个分布式数据库。

1 dns?

域名解析是把域名指向网站空间IP,让人们通过注册的域名可以方便地访问到网站的一种服务。IP地址是网络上标识站点的数字地址,为了方便记忆,采用域名来代替IP地址标识站点地址。域名解析就是域名到IP地址的转换过程。域名的解析工作由DNS服务器完成。

域名解析也叫域名指向、服务器设置、域名配置以及反向IP登记等等。说得简单点就是将好记的域名解析成IP,服务由DNS服务器完成,是把域名解析到一个IP地址,然后在此IP地址的主机上将一个子目录与域名绑定。

域名解析器,是把域名转换成主机所在IP地址的中介。通常上网的时候,敲入一个域名地址,电脑会首先向DNS服务器搜索相对应的IP地址,服务器找到对应值之后,会把IP地址返回给你的浏览器,这时浏览器根据这个IP地址发出浏览请求,这样才完成了域名寻址的过程。操作系统会把你常用的域名IP地址对应值保存起来,当你浏览经常光顾的网站时,就可以直接从系统的DNS缓存里提取对应的IP地址,加快连线网站的速度。

2 dns解析过程

以访问百度为例:
1.在浏览器中输入www.baidu.com之后,系统会检查本地hosts文件是否存在域名映射,如果存在,则域名解析到此完成,我们在本地开发时经常就是这么做的。

2.如果本地hosts文件不存在映射关系,则会查询本地DNS缓存,如果存在,则域名解析完成。

3.如果本地DNS缓存没有命中,则查找本地DNS服务器,如果存在,则域名到此解析完成。

4.如果本地DNS服务器已缓存了此域名映射关系,则返回此映射,完成域名解析。

5.如果以上解析都失败了,本地DNS服务器会把请求发至 根DNS服务器,根DNS服务器收到请求后会返回一个负责该顶级域名服务器的IP。本地DNS服务器收到IP后,将会请求这个IP对应的服务器,就这样逐层查找,直至找到baidu.com主机。

image.png

3 dns预解析?

DNS预解析是浏览器试图在用户访问链接之前解析域名,域名解析后,如果用户确实访问该域名,那么DNS解析时间将不会有延迟。

遇到网页中的超链接,DNS prefetching从中提取域名并将其解析为IP地址,这些工作在用户浏览网页时,使用最少的CPU和网络在后台进行解析。

当用户点击这些已经预解析的域名,可以平均减少200毫秒耗时(假设用户最近还未访问过该域名),更重要的是用户不会遇到DNS解析最坏的情况(往往超过1秒)。

这样可以极大的加速(尤其是移动网络环境下)页面的加载。在某些图片较多的页面中,在发起图片加载请求之前预先把域名解析好将会有至少 5% 的图片加载速度提升。

4 dns预解析如何实现?

ref:https://blog.csdn.net/qq_35432904/article/details/83988726
DNS Prefetch 应该尽量的放在网页的前面,推荐放在 <meta charset="UTF-8"> 后面。具体使用方法如下:

 

<meta http-equiv="x-dns-prefetch-control" content="on">
<link rel="dns-prefetch" href="//www.zhix.net">
<link rel="dns-prefetch" href="//api.share.zhix.net">
<link rel="dns-prefetch" href="//bdimg.share.zhix.net">

X-DNS-Prefetch-Control 头控制着浏览器的DNS预解析功能
X-DNS_prefetch-Control: on|off
on:启用DNS预解析。在浏览器支持DNS预解析的特性时即使不适用该标签浏览器依然会进行预解析。
off:关闭DNS预解析。这个属性在页面上的链接并不是由你控制的或是你根本不想向这些域名引导数据时非常有用。

 

<link rel="dns-prefetch" href="http://renpengpeng.com" />
<!--如果不确定是http还是https连接的话建议如下写法 -->
<link rel="dns-prefetch" href="//renpengpeng.com" />

实现原理:

1.<meta>信息告诉浏览器,当前页面要做DNS预解析;

 

  <meta http-equiv="x-dns-prefetch-control" content="on" />

2.</head>使用<link>标签来强制对DNS预解析;

 

  <link rel="dns-prefetch" href="http://bdimg.share.baidu.com" />

3.dns-prefetch需慎用,多页面重复DNS预解析会增加重复DNS查询次数;

4.浏览器对网站第一次的域名DNS解析查找流程:

浏览器缓存 -> 系统缓存 -> 路由器缓存 -> ISP DNS缓存 -> 递归搜索

image.png

 

5.如果要禁止隐式的DNS Prefetch,可以使用以下标签

 

<meta http-equiv="x-dns-prefetch-control" content="off">

注意事项:虽然使用 DNS Prefetch 能够加快页面的解析速度,但是也不能滥用,因为有开发者指出 禁用DNS 预读取能节省每月100亿的DNS查询

5 应用场景

页面中的静态资源在不同的domain下,如CSS、JS、图片等文件

适合在以下场景中使用:

  • 电商网站的商品页大量载入不同domain下的商品图,如淘宝
  • 手机网页
  • 大型网站
  • js或服务端重定向

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值