2016-09-08 6 views
2

コンテキスト: 私はゲームのアイデアを楽しみながら楽しんでいます。私はhool5のキャンバスとjavascriptでそれをやっています。まわり。複数のタイムアウトまたは複数の呼び出しがJavascriptである

問題: 私のゲームでは、時々刻々と起こることがたくさんあり、新しいことは常に作成されています。数秒以内であれば、精度は必要ありません。

私の最初のアイデアは、実行時間に基づいて新しいタスクを挿入することによって、手作業でソートされた配列を持っていただけで、タイムアウト時に関数を設定し、新しいタスクを取得し、次の行の次の質問を取得し、タイムアウトを待つ。新しい項目が追加されると、それが最初の行であるかどうかをチェックし、タイムアウトを適切に変更する。

もっと複雑に聞こえます。

しかし、私は不思議に思っていました....多くのタイマーを設定することの落とし穴は何ですか? 最初は多くのタイマーを設定するのは悪い考えだと思っていましたが、ブラウザが上記のように時間を処理しているのか、それとも他のエフェクティブな方法があるのだろうかと思い始めました。

基本的には、私の懸念を要約すると: 複数のタイムアウトを使用する際の問題は何ですか? この種の方法にはどんな落とし穴がありますか?または「Gotchas」

ありがとうございました!

+0

これがオプションかどうかはわかりませんが、1回のタイムアウトで再帰を作成し、複数の関数を呼び出すことができます(https://jsfiddle.net/Lg0wyt9u/1220/)。 –

+0

これは 'requestAnimationFrame'でも行うことができますhttps://jsfiddle.net/Lg0wyt9u/1221/ –

答えて

1

私の頭の上には、1つのタイムアウトが割り当てなければならない変数が1つあります。発生する前にそのタイムアウトをキャンセルしたい場合、そのハンドルでclearTimeout()を行う必要があります。あなたがそれらの多くを持っているなら、あなたのコードは使いこなせるように混乱するかもしれません。

さらに、Javascriptはシングルスレッドであるため、同時にアクションを実行することはできません。確かにそれは瞬時に感じるのに十分速いですが、スタックオーダーを持っていても違いはありません。それはあなたが一つの大きな世界的なハンドリング機能や複数の小さな専用のものを行うことを選択するかどうかはあなた次第ですので、最高のように、しかし、あなたをコーディングするためにあなたの選択です一日の終わりに

:)

+0

私はそのすべてを理解していますが、タイムアウトはどのようにシーンの後ろで作業するのが私の問題です、私は怖い、たくさんのリソースやコストがかかります。 心のおかげでありがとう、それはおそらく私の頭の中で動作する方法の写真を置くのを助けた。 –

+0

私が知る限り、内部的にタイムアウトはブラウザのタイマースレッドに入れられます。これはjsスレッドとは別です。彼らは彼らが望むようにカウントダウンし、終了したらjsスレッドにコールバックを入れます。 [編集:あなたがパフォーマンスについて心配している場合は、あなたが何千ものそれらを持っているまでこれは間違いなく問題ではありません;)] – tomiy

0

複数のタイムアウトを設定しますパフォーマンスには影響しませんので、心配する必要はありません。内部でNode.js handles timeouts in a similar manner to yours idea。あなたには、いくつかの例を見たい場合は、次のスニペットを見て:

let count = 10000; 
 

 
console.time('Total time') 
 

 
for (let i = 0; i < count; ++i) { 
 
    setTimeout(() => { 
 
    if (--count === 0) { 
 
     console.timeEnd('Total time') 
 
    } 
 
    }, i/10); // Set 10 timeouts for each millisecond 
 
}

理想的にはそれは実行だあなたが見ることができるように、実際の結果がここまでからではなく、正確に1000ミリ秒を取る必要があります。

関連する問題