这不是什么大问题,更像是顿悟。
所以我有两个初始化函数,它们在 javascript 中连续运行,如下所示:
object1.Init();
object2.Init();
所以我想,为了让它们“更快”,我可以尝试同时调用它们,以便它们可以通过这种方法同时运行:
setTimeout(function() {
object1.Init();
}, 0);
setTimeout(function() {
object2.Init();
}, 0);
我的理由是,如果我这样做,两个函数将“同时”启动,然后每个函数都需要时间结束(一个可能在 300 毫秒内结束,另一个在 500 毫秒内结束)。
哇,我最初认为这是一个好主意,但后来我意识到两个Init()函数都使用一个全局变量,所以我害怕得要死,一个可能会被另一个改变,从而导致灾难性的结果。
所以我最终做了这个简单的测试,看看我的假设是否正确。
var cnt = 0;
var x1 = 0;
var x2 = 0;
setTimeout(function() {
t1 = new Date().getTime();
for (cnt=0; cnt<1000000000; cnt++) {
x1++;
}
t2 = new Date().getTime();
document.getElementById("mydiv").innerHTML += "<br>" + (t2-t1) + " milliseconds " + x1 + "#" + t1 + "#" + t2;
}, 0);
setTimeout(function() {
var t3 = new Date().getTime();
for (cnt=0; cnt<1000000000; cnt++) {
x2++;
}
var t4 = new Date().getTime();
document.getElementById("mydiv").innerHTML += "<br>" + (t4-t3) + " milliseconds " + x2 + "#" + t3 + "#" + t4;
}, 0);
结果是:
2504 milliseconds 1000000000#1379702812419#1379702814923
2514 milliseconds 1000000000#1379702814923#1379702817437
真正告诉我的是:
a) javascript 中没有并发之类的东西,因为第二个循环在第一个循环结束后开始
b)因此我很安全,全局变量不会受到影响
c) 像这样使用 settimeout() 来运行两个 init() 函数是没有意义的
我猜a)是因为javascript是单线程的,这真的很可惜(是的,我知道网络工作者)。