最新消息:

DNS预获取(dns-prefetch)

技术 admin 2308浏览 0评论

今天翻看twitter的源码的时候看到了一下内容:

<link rel=”dns-prefetch” href=”http://a0.twimg.com”/>
<link rel=”dns-prefetch” href=”http://a1.twimg.com”/>
<link rel=”dns-prefetch” href=”http://a2.twimg.com”/>
<link rel=”dns-prefetch” href=”http://a3.twimg.com”/>
<link rel=”dns-prefetch” href=”http://api.twitter.com”/>

查阅了相关资料,知道DNS Prefetch也就是DNS预获取,也是前段优化的一部分。在前段优化中关于DNS的有两点:一是减少DNS的请求次数,第二个就是进行DNS预先获取。

DNS Prefetch 已经被下面的浏览器支持

Firefox: 3.5+
Chrome: Supported
Safari 5+
Opera: Unknown
IE: 9 (called “Pre-resolution” on blogs.msdn.com)

默认情况下浏览器会对页面中和当前域名(正在浏览网页的域名)不在同一个域的域名进行预获取,并且缓存结果,这就是隐式的DNS Prefetch。如果想对页面中没有出现的域进行预获取,那么就要使用显示的DNS Prefetch了,也就是使用link标签:

<link rel="dns-prefetch" href="http://api.twitter.com"/>

DNS Prefetch应该尽量的放在网页的前面,这样浏览器为了加快域名DNS解析速度,会对网页的所有链接先做域名解析。

PS:可以通过下面的标签禁止隐式的DNS Prefetch

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

转自:http://www.hdj.me/html-dns-prefetch

ps:但是,dns预获取带来的作用有时可能是负面的。DNS Prefetch是一种即时预读技术, 在你浏览当前网页时, 它会提前预读大量的(也许你不一定用得上的)相关链接的DNS解析结果, 并缓存它们;这样做的用意是好的. 但是这个预读过程进行的时机不对, 它选择在你打开网页时,  进行的预读. 而要预读就要浪费系统资源, 所以当你打开网页时, 会发现页面的加载不是很流畅.

再补充3个禁用的理由:
1, 你经常访问的页面, 已经做过dnscache, 无需打开预读.
1, 如果你只是访问网站内部资源(在同一域名下), 无需打开预读. 只有当你访问有大量外链的网站, 且你又想点这些外链时, 才会真正起到加速作用.
2, 新domain(从来没访问过的域名)的dns解析速度其实并不慢, 就算慢, 也就第一次慢, 而预读这个动作是在每个页面都会进行的.

转载请注明:jinglingshu的博客 » DNS预获取(dns-prefetch)

发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址