前端性能优化之--- DNS Prefetch

DNS原理

DNS(Domain Name System, 域名系统),作为域名和IP地址相互映射的一个分布式数据库。当浏览器访问一个域名的时候,需要解析一次DNS,获得对应域名的ip地址。在解析过程中,按照浏览器缓存、系统缓存、路由器缓存、ISP(运营商)DNS缓存、根域名服务器、顶级域名服务器、主域名服务器的顺序,逐步读取缓存,直到拿到IP地址。

DNS Prefetch原理

DNS Prefetch就是根据浏览器定义的规则,提前解析之后可能会用到的域名,使解析结果缓存到系统缓存中,缩短DNS解析时间,来提高网站的访问速度。

如何使用DNS Prefetch

自动解析Chromium使用超链接的href属性来查找要预解析的主机名。当遇到a标签,Chromium会自动将href中的域名解析为IP地址,这个解析过程是与用户浏览网页并行处理的。但是为了确保安全性,在HTTPS

页面中不会自动解析。手动解析在页面添加如下标记

<link rel="dns-prefetch" href="与当前不同域名的链接">

上面的link标签会让Chromium预取"img.alicdn.com"的解析。

自动解析控制当我们希望在HTTPS页面开启自动解析功能时,添加如下标记

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

当我们希望在HTTP页面关闭自动解析功能时,添加如下标记

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

什么时候不需要使用DNS预载?

如果你所有的资源文件都在同一个域名下。当用户请求该页面的时候,浏览器已经解析过域名了,所有需要加载的JS,CSS,以及图片文件都在同一个域名下,所以没必要为自己的域名做预载。非得强制预载的话,反而会让浏览器再做一次解析,增加了页面的加载时间和效率。(注:dns-prefetch需慎用,多页面重复DNS预解析会增加重复DNS查询次数)

什么时候需要使用DNS预载?

现在,如果你有大量的第三方插件和资源,比如各种广告JS,前端框架等需要通过非自己域名进行加载。
基于当前前端框架的流行,加载大量第三方资源逐渐成为常态。而与此同时,尽管浏览器在加载第三方资源的时候,是并行的。浏览器会先解析哪个域名下的资源不是按照代码中的顺序进行,有些需要提前加载的资源也许会因为DNS解析慢,而导致后续加载的代码无法执行或者样式出错。
所以DNS预载可以有效提升页面的加载速度,以及让页面加载效果更符合预期。

发布了14 篇原创文章 · 获赞 4 · 访问量 8816

猜你喜欢

转载自blog.csdn.net/weixin_41575159/article/details/95325872