美文网首页
如何提升前端性能(1)——dns预解析

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

作者: 小妍妍说 | 来源:发表于2019-07-30 16:04 被阅读0次

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或服务端重定向

相关文章

  • 前端性能优化

    前端项目性能优化: DNS 预解析 DNS Prefetch 是一种 DNS 预解析技术, 浏览器会在加载网页时对...

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

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

  • 不能错过的web前端性能优化总结

    web前端性能优化主要分为以下几个板块: 加载优化DNS预解析合并img、css、javascript文件,减少h...

  • 前端性能优化

    网络性能优化 DNS预解析:DNS解析也需要时间,所以,需要通过预解析的方式来预先获取域名所对应的IP 缓存缓存对...

  • 性能问题

    网络相关 DNS预解析 DNS解析也是需要时间的,所以可以使用预解析预先获得域名对应的ip 缓存 对前端优化很重要...

  • dns-prefetch

    前端优化系列之一:DNS预获取 dns-prefetch 提升页面载入速度 DNS Prefetching 是让具...

  • 前端页面性能优化

    提升页面性能的方法 非核心代码异步加载 利用浏览器缓存 使用CDN 资源压缩合并,减少http请求 预解析DNS ...

  • 2019-03-29dns-prefetch

    前端优化系列之一:DNS预获取 dns-prefetch 提升页面载入速度 https://www.cnblogs...

  • 前端优化篇: DNS预解析提升页面速度

    前端优化篇: DNS预解析提升页面速度 在网页体验中我们常会遇到这种情况,即在调用百度联盟、谷歌联盟以及当前网页所...

  • 很重要!涨知识:前端性能

    一、网络方面 1、DNS预解析。DNS解析也是需要时间的,可以通过预解析的方式预先获取域名所对应的IP 2、浏览器...

网友评论

      本文标题:如何提升前端性能(1)——dns预解析

      本文链接:https://www.haomeiwen.com/subject/zesgrctx.html