从开发人员工具

时间:2016-02-23 11:53:23

标签: javascript html

在我正在调试的网络应用程序中,索引页面如下所示。

<head>
    <base href="/">
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    <meta name="renderer" content="webkit" />
    <meta http-equiv="expires" content="0" />
    <meta http-equiv="cache-control" content="no-cache" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0" />
    <link rel='stylesheet' href='u.css?1456217719620'></link>
    <link rel='stylesheet' href='ll.css?1456217719620'></link>
    <link rel='stylesheet' href='aa.css?1456217719620'></link>
    <script src='c.js?NaN'></script>
    <link rel="shortcut icon" href="/images/favicon.ico" />

    <script src='ll1.js?1456217719620'></script>
    <script src='ll2.js?1456217719620'></script>
    <script src='ll3.js?1456217719620'></script>
    <script src='ll4.js?1456217719620'></script>
    <script src='ll5.js?1456217719620'></script>
    <script src='ll6.js?1456217719620'></script>
    <script src='aa.js?1456217719620'></script>
</head>

<body>
    <!-- Edit: As suggested in one of the reply, could it be because there are scripts like this in body? -->
    <script type="text/javascript">
      (function() {
        var u='//widget.uservoice.com/xxxxx.js';
        var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0];
        g.type='text/javascript'; g.async=!1; g.defer=!0; g.src=u; s.parentNode.insertBefore(g,s);
      })();
      UserVoice = window.UserVoice || [];
    </script>

</body>

某些脚本在开发者工具中出现两次(Chrome,见下图)

enter image description here

对于第二个请求,有时两者都是200而不是304。

这是正常的吗?

可能导致它有时出现两次,有时只出现一次?

[编辑1]与此问题不同How "304 Not Modified" works?它并不总是显示304,有时两者都是200响应。这可能与HTML和javascript的编写方式有关,而不是主持人建议的偏离主题。

enter image description here

甚至nginx都记录了两次请求

[23/Feb/2016:21:56:09 -0500] "GET /ll1.js?1456217719625 HTTP/1.1" 200 220276
[23/Feb/2016:21:56:09 -0500] "GET /ll1.js?1456217719625 HTTP/1.1" 200 220284

[编辑2]我认为这可能与&#34; Large&#34;文件请求?因为如下图所示,我试图加载几个javascript文件,其中一些是几MB的大小。我在javascript中没有做太多,大多数较小的文件只包含&#34; console.log()&#34;,较大的版本只是&#34; var xxx = [&#39;大阵列&#39;];&#34;

enter image description here

2 个答案:

答案 0 :(得分:2)

如果您的Javascript代码修改了DOM并添加了新的<script>节点,那么浏览器将加载src属性中指向的新脚本。所以有可能。但是,如果Web服务器表示它没有被修改(代码304),则可以从浏览器缓存提供第二请求。

答案 1 :(得分:0)

tl; dr 尝试右键单击Tag Assistant扩展图标>选项>勾选“忽略外部脚本”。

可能的答案是您正在运行Tag Assistant(通过Google)扩展程序。我今天的经验是,我将第三方的SEO <script>标签粘贴到我们的网站中,将其javascript代码段粘贴到我们的网站中,这会创建一个相当普通的动态<script>标签并将其插入到网站的头部页面(实际上是将其插入页面上找到的第一个脚本标记之前,该标记可能不在头部,但没关系)。我发现脚本名称在网络窗格中出现了两次,一次又一次。

我为脚本名称创建了一个XHR断点,并发现它在Tag Assistant扩展的tag_assistant_compiled.js文件中停止了,因为它提出了一个非常刻意的XHR请求来加载外部脚本文件。查找堆栈跟踪记录表明它是有意为之,但我无法真正理解为什么它需要发出请求。在检查扩展选项时,我发现了一个名为“忽略外部脚本”的复选框,果然,勾选并刷新页面意味着对该脚本没有第二次请求。