javascript - 在 CSS 文件之后下载本地脚本,而不是外部文件

标签 javascript css performance google-chrome optimization

我遇到了一些有趣的浏览器行为 (Chrome),我希望深入了解这些行为。

我的 html 文档具有以下结构(我一直很注意域名)

 // Hosted on http://www.example.com
 <html>
    <head>
      <link href="http://cdn.com/css1.css">
      <link href="http://cdn.com/css2.css">
      <link href="http://cdn.com/css3.css">
    </head>
    <body>

      <img src="http://cdn.com/img1.jpg">
      <img src="http://cdn.com/img2.jpg">

      <script src="http://www.example.com/local-js-1.js" async></script>
      <script src="http://www.example.com/local-js-2.js" async></script>
      <script src="http://another-cdn.com/ext-js-1.js" async></script>
      <script src="http://another-cdn.com/ext-js-2.js" async></script>
    </body>
 </html>

但 Chrome 会等到 CSS 文件下载完成后再下载本地 javascript 文件。当那些 javascript 文件是外部文件时,它 (chrome) 不会等待。我认为这可能是资源数量问题,但除了 index.html 文档和这两个本地 javascript 文件外,我没有从根域下载任何文件。

如果我不包含外部 javascript 文件,或者外部文件在本地文件之前包含,则为真。

本地和外部都包含在上面的 HTML 中: Both local and external included together as described in the HTML above

Only Local files :注意两个图像是如何被请求的,如果我刷新页面,它们将以随机顺序显示,它们首先被包含在这里的事实是偶然的......显然它们都在等待请求之前同样的事情: Only Local files : Notice how the two images are requested first

我更喜欢本地文件与 CSS 文件同时下载(从与 CSS 文件相同的 CDN 提供它们会导致上述相同的行为......大概是因为 Chrome 只从同一域下载一些资源一次)这样我就不必为额外的 CDN 的 DNS 查找付费,所以我的问题是“为什么 chrome 在下载外部文件的同时不下载我本地引用的文件?”

最佳答案

郑重声明,我无法完全重现您的场景……也许 JSbin 会有所帮助。无论如何,我发现在 Chrome 和 Firefox 中,无论是同一域还是其他域,所有脚本都阻止了下载。 (然而,Firefox 在它的瀑布上有一个阻塞指示器,所以你可以判断解析没有被阻塞)

关于“为什么 Chrome 会这样做?”这个问题的答案。虽然我无法回答问题的那一部分,但我的猜测是它可能只是一个尚未优化的条件……显然,对象加载方式的所有依赖关系都很难理清。例如,在调查时,我发现这个 4 年前的 Firefox 错误仍然存​​在:https://bugzilla.mozilla.org/show_bug.cgi?id=693725

至于“我如何解决它?”这个更有趣的问题,我发现这行简单的代码让所有的 CSS 和脚本文件尽早下载并异步应用:

<link
  rel="stylesheet"
  type="text/css"
  media="later"
  onload="this.onload=null;this.media='screen'"
  href="https://ajax.googleapis.com/ajax/libs/jqueryui/1.11.2/themes/smoothness/jquery-ui.css"
 />

我在 Chrome、Firefox 和 IE11 中检查了上面的内容,并且都开始并行下载,并成功应用了工作表中的 CSS 规则

关于javascript - 在 CSS 文件之后下载本地脚本,而不是外部文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27830861/

相关文章:

html - 使用 HTML/CSS 将导航栏居中

c# - 奇怪的性能行为

java - 在 JAVA 中对两个非常大的 CSV 文件进行性能比较和查询

javascript - 将分数设置到记分牌中。但记分牌会在页面刷新时重置。本地存储

javascript - 查找包含特定属性前缀的元素

jquery - 翻转文本未显示在所有元素中

html - 在 CSS 中显示来自十个图标图像的单个图标,它们也必须缩放?

javascript - 存储按钮点击次数

javascript - 维护上下文

performance - 需要足够长和复杂的 Markdown 文档来进行性能测试