ホームページ >ウェブフロントエンド >jsチュートリアル >JavaScriptタイマーベースの擬似スレッド
以前の記事「JavaScriptの実行とブラウザの制限」は、主要なブラウザが長期にわたるJavaScriptコードを処理し、「反応しないスクリプト」エラーをトリガーする方法について説明しました。ブラウザの動作を変更することは実行不可能であり、サーバー側の処理が常にオプションではないため、タイマーはブラウザをフリーズすることなく長いタスクを実行するための実用的なソリューションを提供します。
javaScriptタイマーとは?
JavaScriptタイマーを使用すると、指定された遅延後にコード実行をスケジュールできます。 2つの主要な機能を提供します:
setTimeout(function, msec[, arg1 … argN])
ミリ秒後に実行します。 オプションの引数は、関数に渡すことができます。msec
setInterval(function, msec[, arg1 … argN])
に似ていますが、キャンセルされるまでsetTimeout
ミリ秒ごとに関数を繰り返し実行します。
msec
は、それぞれclearTimeout()
およびclearInterval()
操作をキャンセルするために使用されます。 たとえば、setTimeout
setInterval
var timerID = setTimeout(myfunction, 500); clearTimeout(timerID); // myfunction() will never be called重要なメモ:
setTimeout
参照setInterval
(括弧なし)。 setTimeout(myfunction(), 500);
ミリ秒タイミングはおおよそです。 指定された遅延後にブラウザがアイドル状態にあるときに関数を実行します。
myfunction()
関数の実行順序は保証されていません。 setTimeout(f1, 50); setTimeout(f2, 50);
f2()
タイマーベースの擬似スレッド時限コードがすぐに実行されないため、ブラウザのメインスレッドは他のタスクに対して解放されます。これにより、長いプロセスを小さなチャンクに分解することができます。 たとえば、関数を実行するには、、および
javascriptの擬似読み取りとは何ですか? javascriptのシングルスレッドの性質とは、一度に1つのタスクを処理することを意味します。 擬似スレッドは、長いタスクをより小さな部品に分解し、タイマーで実行することでマルチスレッドをシミュレートし、ブラウザが他のタスクを処理できるようにします。
javaScriptタイマーはどのように機能しますか?遅延後に一度関数を実行しますが、 。で停止します
pseudo-threading vs.実際のスレッド(例:python)?pythonのマルチスレッドは、真の並列性を可能にしますが、人種のような複雑さを導入します。 JavaScriptの擬似スレッドはよりシンプルですが、CPUバインドタスクではパフォーマンスが低いです。
擬似スレッドの代替案(約束、async/await)?約束、およびは非同期操作に優れていますが、メインスレッドをブロックするCPUバウンドタスクではありません。
pseudo-threadを停止しますか?。 pseudo-threading and web Workers?
擬似スレッドの実用的なアプリケーション?画像処理、複雑な計算、データ操作など。メインスレッドをブロックする可能性のあるもの。
擬似スレッドに直接焦点を合わせていませんが、のようなライブラリは非同期操作の管理に役立ちます。 JavaScriptの組み込みタイマーは通常十分ですf1()
f2()
アレイから最初の要素(関数)を削除して返し、その後実行されます。 f3()
配列内のすべての関数を実行し、それぞれ20msの遅延があります。 このアプローチは、ブラウザのタイムアウトしきい値を超えて単一の関数がない場合、任意の数の機能に対して機能します。 ただし、大規模なデータセットを処理するには、より堅牢な手法が必要であり、将来の投稿でカバーされます。
function ProcessThread(func) {
var ms = 20;
setTimeout(function() {
func.shift()();
if (func.length > 0) { //Improved condition check
setTimeout(arguments.callee, ms);
}
}, ms);
}
ProcessThread([f1, f2, f3]);
よくある質問(FAQ)func.shift()
ProcessThread
次のセクションでは、JavaScriptタイマーと擬似スレッドに関する一般的な質問に答えます。 元のFAQセクションは、明確さと簡潔さのために再編成され、書き直されました。 特定の例が簡素化されていますsetTimeout()
は特定の間隔で関数を繰り返し実行します。
setInterval()
setInterval()
pseudo-threadingの制限?clearInterval()
真の並列実行を有効にしません。インターリーブブラウザータスクでは、タスクが順番に実行されます。 ゆっくりとしたチャンクが後続のものを遅らせる。async/await
を使用します
clearInterval()
Webワーカー内に擬似読み取り
以上がJavaScriptタイマーベースの擬似スレッドの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。