ホームページ  >  記事  >  ウェブフロントエンド  >  JavaScript の非同期実行メカニズムの概要

JavaScript の非同期実行メカニズムの概要

高洛峰
高洛峰オリジナル
2017-03-19 16:19:051260ブラウズ

----非同期実行メカニズムは次のとおりです:

1. 左右の同期タスクはメインスレッドで実行され、実行スタックを形成します

2. メインスレッドに加えて、タスクもあります。非同期タスクに実行結果がある限り、イベントをタスク キューに配置するだけです

3. 実行スタック内のすべての同期タスクが完了すると、システムはタスク キューを読み取り、対応するタスクをキューに配置します。メインスレッドで実行されると、メインスレッドは待機状態を終了し 、実行スタックに入り、実行を開始します

(メインスレッドが空である限り、タスクキューが読み取られます。これが

JavaScript です)実行メカニズム。このプロセスは継続的に繰り返されます)

4. メインスレッドは上記のステップを繰り返します

- JavaScript がシングルスレッドである理由:

1. JavaScript はブラウザーとして一度に 1 つのことしか実行できません。スクリプト言語では、複数のスレッドで実行される操作は競合を引き起こす可能性があるため、JavaScript はシングルスレッドでのみ実行できます

--- -

HTML5 標準では、setTimeout() の 2 番目のパラメーターの最小値 (最短間隔) を制限してはならないと規定しています。この値より小さい場合は、自動的に増加します。これより前の古いブラウザでは、最小間隔が 10 ミリ秒に設定されていました。さらに、これらの DOM 変更 (特にページの再レンダリングを伴う変更) は通常、すぐには実行されず、16 ミリ秒ごとに実行されます。この時点では、setTimeout() よりも requestAnimationFrame() を使用した方が効果が高くなります。

setTimeout() はイベントを「タスク キュー」に挿入するだけであることに注意してください。メインスレッドは、指定された

コールバック関数 を実行する前に、現在のコード (実行スタック) の実行が完了するまで待機する必要があります。現在のコードに時間がかかる場合は、長時間かかる可能性があるため、setTimeout() で指定された時間にコールバック関数が実行されることを保証する方法はありません。

----

「タスク キュー」はイベント キュー (メッセージ キューとしても理解できます) であり、IO デバイスがタスクを完了すると、関連する非同期タスクを表すイベントが「タスク キュー」に追加されます。 . 「実行スタック」に入ることができます。メインスレッドは「タスクキュー」を読み取ります。これは、その中のイベントを読み取ることを意味します。

「タスクキュー」内のイベントには、IO デバイスイベントに加えて、ユーザーが生成したイベント (マウスクリック、ページスクロールなど) も含まれます。コールバック関数が指定されている限り、これらのイベントは発生時に「タスクキュー」に入り、メインスレッドによる読み取りを待ちます。

いわゆる「コールバック関数」(コールバック)は、メインスレッドによってハングアップされるコードです。非同期タスクでは、コールバック関数を指定する必要があります。メインスレッドが非同期タスクの実行を開始すると、対応するコールバック関数が実行されます。

「タスクキュー」は先入れ先出しのデータ構造で、最初にランク付けされたイベントが最初にメインスレッドによって読み取られます。メインスレッドの読み取りプロセスは基本的に自動的に行われ、実行スタックがクリアされるとすぐに、「タスクキュー」の最初のイベントが自動的にメインスレッドに入ります。ただし、後述する「

timer」関数により、メインスレッドは最初に実行時間を確認する必要があり、特定のイベントは指定された時間後にのみメインスレッドに戻ることができます。

----JavaScript は、コードが存在しない場合はすぐに実行されます。プロセスがアイドル状態の場合は、できるだけ早く実行されます。

以上がJavaScript の非同期実行メカニズムの概要の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。