浏览器在收到回复时会导致JS中断吗?

时间:2010-07-14 15:25:23

标签: javascript onload interrupt

无论出于何种原因,假设我们在页面上有三个内联脚本。这些脚本中的每一个在功能上都是相同的,并且所有三个脚本都将创建一个脚本标记,其中源设置为服务器端脚本(每个脚本具有稍微不同的参数),这些脚本返回JS以执行。假设这个JS包含一个全局变量,该变量包含它最后调用的函数的重要参数。

var g_important = {"arbitrary1":"someval1", "arbitrary2":"someval2"};
doSomething();

有问题的脚本驻留在带有负载均衡器的CDN上。假设我们原始JS的每个请求实际上都可以发送到不同的服务器。服务器的响应时间现在是可变的,这意味着我们可能首先得到对第二个请求的响应。这不是问题,因为我们用代码发回一个参考值,确保我们至少使用指定的对象。

我的问题是:当我们几乎同时得到两个回复时会发生什么?这是一个非常不可能的情况,但如果第一个响应是在第二个响应进入时执行doSomething()的过程中,那么浏览器会做什么?它是否解析变量的值并将第二个doSomething调用推入堆栈?

假设是这种情况,doSomething可以使用错误的值 理论 。我不能重新创造这种情况,因为时机必须绝对完美,但我需要知道它是否是一个问题。

3 个答案:

答案 0 :(得分:3)

Javascript一次“运行一行”。如果另一个脚本正在运行,脚本将始终堆叠。

从技术上讲,2个脚本不能同时加载,因此1个将在另一个之前执行。

答案 1 :(得分:0)

这取决于如何注入脚本。技术在确保执行顺序方面取得了成功。常见且简单的document.createElement + head.appendChild方式不会 例如,确保IE中的订单。

Load script without blocking

的更多信息

答案 2 :(得分:0)

所以你担心g_important对象在执行doSomething()期间会发生变化吗?我不认为这是可能的,但是如果你担心它,为什么不在完成每个AJAX请求时注册doSomething()作为回调。然后,对函数的每次调用都会传递其请求的数据,而不会传递其他数据。

也许我并不完全了解情况,但如果可能的话,这种事情似乎很容易避免。