代码之家  ›  专栏  ›  技术社区  ›  Dan Herbert

JavaScript在Firefox 3中异步加载(根据Firebug)?

  •  3
  • Dan Herbert  · 技术社区  · 16 年前

    我试图分析一个网站的性能,我相当有信心这个网站会因为页面上加载JavaScript文件而变慢。

    页面上多次包含相同的JavaScript文件,以及 <script /> 标签分散在整个页面上,而不是 included at the bottom .

    然而,也有一些例外。在某些情况下,会加载JavaScript,但与此同时,其他资源也会被加载,例如其他JavaScript文件和图像。

    我一直认为JavaScript会阻止页面上其他资源的加载。我这样想是不对的,还是这种行为会因浏览器或浏览器版本而异?


    对于那些解释了加载脚本如何阻止加载其他资源的人,我已经意识到了这一点。我的问题是为什么要写剧本 不会 阻止加载其他资源。Firebug显示了一些JavaScript文件 不要 阻止加载其他资源。我想知道为什么会发生这种情况。

    10 回复  |  直到 16 年前
        1
  •  7
  •   annakata    16 年前

    但不一定是致命的,这是大型网站的典型特征,这些网站可能是由不同团队的工作积累而来的,或者只是简单的旧的糟糕编码、规划或维护。

    响应时间,并且可以在一定程度上改善实际加载时间(因为允许所有先前的资源首先异步),但它永远不会像非阻塞请求那样有效(尽管它们具有很高的技术能力障碍)。

    关于非阻塞JS的相当不错的讨论 here .

        2
  •  2
  •   James Conigliaro    16 年前

    简而言之,这可能是工具的问题,而不是资源的实际加载方式。…至少值得排除。

        3
  •  1
  •   gregers    16 年前

    我想你使用的是Firefox 3.0.10和Firebug 1.3.3,因为它们是最新版本。

    Firebug 1.4测试版在net选项卡上做了许多改进,但它需要Firefox 3.5。如果你想在Firefox 3.0中测试它,请使用前面的一个 1.4 alpha versions

    我的结论是不信任Firebug的结果,最终使用了 WebPageTest 来自美国在线的消息令人惊讶地好;-)

    此外,与javascript同时加载的是什么类型的资源?尝试追踪同时加载的资源,看看它是否在css/iframe/html-ajax中被引用。我猜为什么没有加载其他内容,是因为浏览器在看到脚本标签时停止解析当前HTML(没有延迟)。由于它无法继续解析HTML,因此它没有更多请求。

    如果你能提供一个链接到你正在谈论的页面。这将有助于每个人给出更准确的答案。

        4
  •  0
  •   MiffTheFox    16 年前

    渲染的

    从服务器的POV来看,这没什么大不了的,但对用户来说,它可以在速度上产生巨大的差异。

        5
  •  0
  •   Scimon Proctor    16 年前

    如果你仔细想想,标签必须先完成处理,然后才能继续渲染内容。如果标签使用document.write或其他非常愚蠢的东西怎么办?在脚本标记中的任何内容都完成运行之前,页面无法确定它将显示什么。

        6
  •  0
  •   Itay Moav -Malimovka    16 年前


    因此,如果你从同一个域加载所有脚本,你通常会一个接一个地加载它们。

        7
  •  0
  •   John Gietzen    16 年前

    所以,

    <script src="script.js" type="text/javascript" defer="defer"></script>
    

    应该允许浏览器继续并行处理请求。

    参考文献

    http://www.w3.org/TR/REC-html40/interact/scripts.html#adef-defer

    http://www.websiteoptimization.com/speed/tweak/defer/

        8
  •  0
  •   cwash    16 年前

    正如其他人所说,该脚本可能正在通过DOM注入加载其他资源。

    <script> 将标签添加到DOM中。

        9
  •  0
  •   instanceof me    16 年前

    <script> 页面中的标签 head .

    但firefox也可以执行加载 <脚本> s并行: 复制以下两行:

    http://streetpc.free.fr/tmp/test.js
    http://streetpc.free.fr/tmp/test2.js
    

    然后转到 this page <脚本> 头部 ).

    在FF中尝试一下:你会看到“test2 ok”,移动对话框看到“test ok”。 在其他浏览器中,您应该看到“test-ok”(后面没有其他对话框),然后是“test2-ok”(Safari 4除外,在测试前显示tes2)。

        10
  •  0
  •   Christophe Eblé    16 年前

    Javascript文件、框架、数据馈送, 等等,浏览器试图 一次下载其中几个 获得更好的性能。

    Here's the ZDNET blogpost about it.