これは大した問題ではありませんが、突然の悟りのようなものです。
したがって、次のようにjavascriptで連続して実行される2つの初期化関数があります。
object1.Init();
object2.Init();
だから私は、それらを「より速く」するために、両方を同時に呼び出して、この方法で同時に実行できるようにすることができると考えました。
setTimeout(function() {
object1.Init();
}, 0);
setTimeout(function() {
object2.Init();
}, 0);
私の理論的根拠は、これを行うと、両方の機能が「同時に」開始され、それぞれが終了するまでに時間がかかるというものでした (一方は 300ms で終了し、もう一方は 500ms で終了する場合があります)。
うわー、最初は良いアイデアだと思ったのですが、両方の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)最初のループが終了した後に2番目のループが開始されるため、JavaScriptには同時実行性などはありません
b)したがって、私は安全です。グローバル変数は影響を受けません
c) このように settimeout() を使用して 2 つの init() 関数を実行しても意味がありません
a) は、javascript がシングル スレッドであるという事実によるものだと思いますが、これは本当に残念なことです (はい、私は Web ワーカーについて知っています)。