dns prefetch / pre-resolve hostname - 效果如何?

时间:2011-10-11 10:59:19

标签: html http dns

我一直在阅读这是如何运作的,但我正在努力理解它。

据我所知,如果我在网页的头部设置<link rel="dns-prefetch" href="//ajax.googleapis.com" /> 应该看到更快的请求完成是我引用此域上的任何资产。 [ref]

现在有两个问题困扰着我:

1)这仅对将来的页面请求有帮助吗

我的意思是,如果我使用Google的CDN在我的网站的每个页面上获取jQuery 会将<link />添加到任何差异之上吗?或者它只会帮助,比如说,我没有在我的主页上引用CDN,而是在所有其他页面上?在第二个选项中,用户将点击主页,解析并缓存准备好在我的内容页面上下载的DNS主机。

2)我如何测试其有效性?

我想如果我知道答案,我会更好地理解问题1.我正在尝试使用Firebug和Chrome开发人员工具并观看Net和Resources面板,但我看到没有显着差异。我能看到的唯一趋势是,如果有的话,当我使用<link />时需要更长的时间来完成我的请求!!

我已经阅读了关于MDNthe Chromium Blog的文档(两者都旧了!)但我仍然没有得到它。

任何帮助将不胜感激 - 谢谢!

更新 - 2013年1月22日

请阅读更多有关此问题的内容,并认为我应该为具有相同问题的人提供链接。 csswizardry撰写了一篇关于性能的精彩文章,其中he references this issuemore research from perfplanet的链接。如果有人有更多关于此的信息/见解,请添加答案!

This is a link to another, more recent, SO question - 希望这有助于人们找到他们想要的答案。

1 个答案:

答案 0 :(得分:23)

在第一种情况下,DNS预取无效,因为您在每个页面上加载相同的资源。资源应缓存在后续请求中,因此预取dns记录不会产生任何影响。

在第二种情况下,仅仅删除和添加link元素不足以测试预取的效果。即使没有link元素,浏览器也会扫描href以确定要预取的域 - 链接标记是为了告诉它除了浏览器会找到的域之外预取域 - 这在你知道链接的情况下很有用到一个域最终会被重定向到另一个域。

查看预取标记效果的一种方法是设置一些网站。 www.example.com/index.html将包含指向www.anotherexample.com的链接,该链接将重定向到www.athirdsite.com。如果您在使用和没有指向www.athirdsite.com的链接标记的情况下测试此配置,您可能会发现链接标记更快。如果使用的名称服务器具有高延迟,则您更有可能看到此效果。

最后,我只是让浏览器做它的事情,除非你有一个非常特别的理由指示它另外做其他事情。