イベントループ - イベントループ

JSイベントループ

イベント ループはメッセージ ループとも呼ばれ、ブラウザがメイン スレッドをレンダリングする方法です。Chrome のソース コードでは、終了しない for ループが開始され、各ループはメッセージ キューから最初のタスクを取得して実行し、他のスレッドは適切なタイミングでそのタスクをキューの最後に追加するだけで済みます。 。以前は、メッセージ キューは単にマクロ キューとマイクロ キューに分割されていましたが、現在ではこのステートメントは複雑なブラウザ環境に対応できず、より柔軟で変更可能な処理方法に置き換えられています。

W3C 公式の説明によると、タスクごとにタイプが異なり、同じタイプのタスクは同じキューに存在する必要があり、異なるタスクは異なるキューに属することができます。タスクキューごとに優先順位が異なるため、イベントループではブラウザがどのキューを取るかを決定します。ただし、ブラウザにはマイクロキューが必要であり、マイクロキューのタスクの優先順位が最も高く、最初にスケジュールして実行する必要があります。

メインスレッドのレンダリング

マイクロキュー

遅延キュー

インタラクティブキュー

        他のスレッド

JS のタイマーは正確なタイミングを実現できますか? なぜ?

いいえ、理由は次のとおりです。

1. コンピュータのハードウェアには原子時計が搭載されていないため、正確な時刻を計測することができません。

2. OS 自体のタイミング関数には若干の誤差があり、JS タイマーは最終的に OS の関数を呼び出すため、この誤差も伴います。

3. W3C 標準によると、ブラウザがタイマーを実装する場合、ネスト レベルが 5 層を超える場合、最小時間は 4 ミリ秒となり、タイミング時間が 4 ミリ秒未満の場合は偏差が発生します。

4. イベントループの影響を受け、タイマーのコールバック関数はメインスレッドがアイドル状態のときにのみ実行できるため、偏差も発生します。

おすすめ

転載: blog.csdn.net/JackieDYH/article/details/130962260