【问题标题】:Concurrent loading of .js files via https通过 https 并发加载 .js 文件
【发布时间】:2010-02-09 22:37:26
【问题描述】:

我们正在考虑将 .js 拆分为从两个域提供服务,目的是实现并发加载。

问题:我们是否可以 a)为此目的使用子域,并且 b)并发加载是否也适用于 https?

例如,我们想这样请求两个文件:

https://www.example.com/firstfile.js
https://subdomain.example.com/secondfile.js

可行吗?替代品?

【问题讨论】:

  • 只是出于好奇,在提供文件之前合并文件怎么样,所以无论如何你只提供一个事务?
  • @Romain 这就是我们最终想要比较的...哪个更好?:1 个大型 .js 文件请求或 2 个并发较小的 .js 文件请求。

标签: javascript https concurrency


【解决方案1】:

据我所知,它不会起作用。脚本设置为阻止并行下载。原因是脚本的并行加载可能会导致 javascript 中的竞争条件。缩小或按需加载是您的最佳选择。

【讨论】:

  • 如果我错了请纠正我,但我认为并行下载问题仅限于单个域。 (仅供参考,我们也在缩小)
  • 并行下载和并行执行是有区别的,不是吗?我不明白为什么前者不起作用;由于马特概述的原因,后者绝对是不可能的。
  • 我不担心并行执行。所有的执行都将被包裹在 jQuery 的 $(document).ready 中。我们只是试图找出我们可以在服务器请求和下载速度方面发现的任何性能提升。
  • Yahoo 的性能建议对此有很好的说明:developer.yahoo.com/performance/rules.html 实际上归结为 javascript 的本质。如果您并行加载两个文件,您可能会得到未定义的行为,因为一个可能会影响另一个更改的内容,并且文件完成的顺序可能会导致不同的结果。如果您想加快速度,请查看动态加载或按需加载:nczonline.net/blog/2009/06/23/…
  • @DA,我完全理解,这是我发布的第二个链接的有效案例。他们解释了使用一个小的初始脚本来加载其他脚本而不阻塞的方法,不得不承认我没有时间完全通读并尝试它。不过,它似乎可以满足您的需求。 @Pekka,请检查我发布的参考资料。脚本的行为与其他组件不同。
【解决方案2】:

我认为您必须考虑网络的延迟(一种浪费的时间,每次通话都会增加往返时间)。延迟是影响 HTTP 调用响应能力的原因。

我个人顺势减少http调用次数。
我将所有文件合并为一个(+ 最小化 + gzip)

【讨论】:

  • 我同意最小化 + gzip 部分。此外,我会确保服务器填充所有相关标头以改进缓存管理(Content-Expires 等),因此友好的浏览器只会访问服务器一次。
【解决方案3】:

脚本导致的问题是它们会阻止并行下载。 HTTP/1.1 规范建议浏览器每个主机名并行下载不超过两个组件。如果您从多个主机名提供图像,则可以同时进行两次以上的下载。但是,在下载脚本时,浏览器不会启动任何其他下载,即使在不同的主机名上也是如此。 (source)

听起来有问题。

【讨论】:

  • @camomileCase:这就是我们这样做的确切原因。请注意其中的“每个主机名”部分。这个想法是,通过从多个域请求它,我们消除了那些大型(r).js 文件的问题。
  • @DA 这应该是可能的,但我怀疑这是否会给你带来任何性能提升:脚本的 execution 仍将一个接一个地运行,并且 downloading 只发生一次,然后缓存数据。
  • 最后一句是最重要的一句话:“然而,当一个脚本正在下载时,浏览器不会开始任何其他下载,即使是在不同的主机名上。”
【解决方案4】:

在“更快的网站”或“更快的网站”一书中提出的替代方案(我建议您阅读)建议使用将子节点附加到元素的 javascript 函数/方法以图表方式加载 javascript 文件.

您可能想对该主题进行一些研究,但这是您可能需要考虑的一种好习惯。

问候,

【讨论】:

    【解决方案5】:

    a) 是的。使用document.domain 来避免同源策略问题。

    b) 我不知道,但我想不出任何不应该这样做的理由。

    【讨论】:

    • 谢谢,佩卡。您能否澄清一下 document.domain 解决了什么问题,而不是直接从两个不同的 url 请求文件?
    • 没有直接关系,document.domain 只是确保来自域 1 的脚本在访问域 2 上的内容时不会遇到安全问题(称为同源策略)。
    猜你喜欢
    • 2015-10-15
    • 1970-01-01
    • 1970-01-01
    • 2014-07-25
    • 2014-10-21
    • 1970-01-01
    • 2016-03-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多