【问题标题】:Chrome Dev Tools - where to spot a dns prefetch performed with rel=dns-prefetchChrome 开发工具 - 在哪里发现使用 rel=dns-prefetch 执行的 dns 预取
【发布时间】:2018-07-20 09:34:53
【问题描述】:

我怀疑我使用的 rel-prefetch 是否真的按预期执行。事实上,我在网页测试中没有看到 dns 部分与该行的其余部分分开(参见https://stackoverflow.com/a/40380983/1467802 或此处关于谷歌分析https://christoph-rumpel.com/2013/04/front-end-performance-part-01-assets-loading/ 加载的图表之一)

查看.html

<link rel="dns-prefetch" href="https://connect.facebook.net" />
<link rel="dns-prefetch" href="https://www.facebook.com" /> 
<link rel="preconnect" href="https://connect.facebook.net" />
<link rel="preconnect" href="https://www.facebook.com" />

在我的页面中,我仅在用户单击按钮时才调用以下 facebook sdk

$('#button").on('click', function(e) {
  window.fbAsyncInit = function() {
      FB.init({
        appId             : fbAppId,
        autoLogAppEvents  : true,
        status            : false,
        xfbml             : true,
        version           : 'v2.11'
      });

    };
    (function(d, s, id){
      console.log('LIBRARY - Loading and initializing Facebook javascript SDK');
      var js, fjs = d.getElementsByTagName(s)[0];
      if (d.getElementById(id)) {return;}
      js = d.createElement(s); js.id = id; js.async = true;
      js.src = "//connect.facebook.net/en_US/sdk.js";
      fjs.parentNode.insertBefore(js, fjs);
     }(document, 'script', 'facebook-jssdk')
    );
});

因此,当我加载页面并检查 Chrome 开发工具时,我期望看不到 sdk(这是意料之中的,因为它只会在我单击 #button 时加载),但至少在某处看到 dns 查找已经但我在“网络”选项卡和“性能”选项卡上都没有看到有关此预取请求的任何迹象/提示。 当我单击#button 时,在 Network 选项卡中出现 sdk.js 的一行,但检查 Timing 详细信息,我看到 dns 就在 rets 之前,它们之间没有“间隙”,而且似乎没有很好地发生在其余部分之前。

如何以及在何处发现 Chrome 开发工具中的“dns 预取”。

我在这里给出了 fb 脚本的例子,但对于我的其他脚本来说也是一样的。

【问题讨论】:

  • 您可能需要查看chrome://net-export/
  • 不知道这个工具。刚刚尝试过,非常强大的很多信息:) 我通过加载和记录然后分析网站的负载,用这个工具做了 2 次测试。这么奇怪。使用我的所有链接 rel dns-prefetch(其中一个用于 fb sdk)进行第一次测试:“DNS”选项卡在我将页面加载到 facebook.com 和 connect.facebook.net 时确实显示了 dns 请求。这很酷,因为在我点击按钮之前有一个 dns 调用(我没有点击),所以认为它正在工作;但后来我删除了所有 rel dns-prefetch,我仍然在 chrome 工具中找到 dns requets to fb...
  • 在我点击按钮之前,它如何在第二个实验中向 facebook 发送 dns 请求???太奇怪了。我确定在单击按钮之前未加载由 javascript 实例化的 sdk,因为在此之前您看不到它出现在 chrome 开发工具网络选项卡上,但是当您单击时,您会看到它出现。所以js工作正常。
  • 是否有可能 tjs js 加载速度如此之快以至于 js 代码实例化 fb.sdk 被解析并启动 dns requets 甚至在链接 rel-prefetch 之前(它位于我的 之上低于字符集标签)已达到...所以它启动“太快”?我会怀疑...
  • @JoshLee 重新尝试分析净出口数据,你是对的,它有效并证明只有当我有链接 rel dns-prefetch 时才进行 dns 调用。所以它证明了我的链接 rel dns-prefetch 工作。谢谢你的帮助。有一天可能会学习如何在 chrome 开发工具性能/时间线中发现 dns 请求,或者在那里看不到它们是正常的。由于您的答案是正确的,您能否将其作为答案,以便我可以给您一些 SO 点:)

标签: javascript html google-chrome dns google-chrome-devtools


【解决方案1】:

在这里回答一个古老但仍然相关的问题。

您可以将“Chrome 网络日志导出”与“netlog-viewer”结合使用。在他的博客 Andy Davies wrote a great article 上,了解如何执行此操作(以及其他一些分析预连接的方法)。

短版

  1. 在 Chrome 中打开一个新标签页,地址为:chrome://net-export/
  2. 点击“开始记录到磁盘”并选择日志文件的位置
  3. https://netlog-viewer.appspot.com/上导入日志文件
  4. 打开“事件”标签
  5. 为所需的 URL 搜索“HTTP_STREAM_JOB_CONTROLLER”条目
  6. 使用预连接时,单击事件详细信息会显示is_preconnect = true

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-07
    • 2016-03-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-23
    相关资源
    最近更新 更多