JavaScript のマクロタスクとマイクロタスクの詳細

JavaScript のマクロタスクとマイクロタスクの詳細

1. マイクロタスクとは何ですか?

Promise

awaitasync

2. マクロタスクとは何ですか?

setTimeout

setInterval

  • DOMイベント
  • AJAXリクエスト

3. 事例

<スクリプト>

コンソール.log(1)

タイムアウトを設定します(()=>{

    コンソールログ("2")

},0)

Promise.resolve().then(()=>{

    コンソールログ('3')

})

コンソール.log(4)

</スクリプト>

印刷の順序は1-4-3-2であることがわかりました

なぜこの順番になっているのでしょうか?

まず1-4を印刷してください。間違いなく問題ありません。

なぜ最初に 3 が印刷され、次に 2 が印刷されるのですか?

なぜなら、 3 はPromiseであり、 Promiseはマイクロタスクだからです。

2はマクロタスクであるsetTimeoutです

マイクロタスクはマクロタスクよりも早く実行されます。

3が最初に実行され、次に2が実行されます

3.1 結論

  • 最初に同期、次に非同期、最初にミクロ、次にマクロ
  • マイクロタスクはマクロタスクよりも早く実行されます。

4. コード例

<本文>

    <div id="アプリ"></div>

<スクリプト>

// このセクションはDOMレンダリングです。let app=document.getElementById("app")

let cont='<p>私はpタグです</p>'

app.append(続き)

// DOMレンダリング終了 console.log(1)

タイムアウトを設定します(()=>{

    コンソールログ("2")

    アラート('setTimeout2')

},0)

Promise.resolve().then(()=>{

    コンソールログ('3')

    警告('3')

})

コンソール.log(4)

</スクリプト>

</本文>

4.1 コード分析

上記コードの実行分析:

まず1-4実行する必要があります。

次に、まずマイクロタスク、次にマクロタスクに従って

3を出力し、3をポップアップします

次に出力2と表示され、 setTimeout2がポップアップ表示されます[誤り]

マイクロタスクとマクロタスクの間にDOMレンダリングがあるため

次にdomレンダリング、最後にマクロタスクです

そこで1-4を出力した後、 DOMレンダリングが行われます。

次に出力2とsetTimeout2がポップアップします

4.2 結論と応用シナリオ

Microtask>DOMレンダリング>Macrotask 次の例を参照してください

この結論の適用シナリオ

私たちは皆、eChart を作成したことがあります。eChart をレンダリングするタイミングはわかっています。

ノードは、ページの DOM がレンダリングされた後にのみレンダリングできます。

そのため、一部の友人は、リクエストのタイミングをmonitored()ライフサイクルに配置するでしょう

これにより、返されたデータがページ上で正常にレンダリングされることが保証されます。

実際、上記の結論に基づいています。

作成時にデータをリクエストできます。帰ってきたとき。

DOM は確実にレンダリングされます。リクエストはマクロタスクだからです。

マクロタスクの実行時間は DOM レンダリング後です。

JavaScriptのマクロタスクとマイクロタスクの詳細に関するこの記事はこれで終わりです。JavaScript のマクロタスクとマイクロタスクに関するよりJavaScript性の高いコンテンツについては、123WORDPRESS.COM で以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後も 123WORDPRESS.COM を応援していただければ幸いです。

以下もご興味があるかもしれません:
  • js のマクロタスクとマイクロタスクについての簡単な説明
  • JavaScript マクロタスクとマイクロタスク
  • JavaScript マクロタスクとマイクロタスクの実行順序についての簡単な説明
  • JavaScript イベント ループ マイクロタスクとマクロタスク キューの原理に関する簡単な説明
  • JavaScript イベント ループとマクロタスクおよびマイクロタスクの原則の分析
  • JS イベントループの仕組み イベントループ マクロタスク マイクロタスク 原理分析
  • JavaScript のマイクロタスクとマクロタスクの説明

<<:  Alipay の新しいホームページのフロントエンドの実践的な概要

>>:  HTML での位置の使用に関する簡単な紹介

推薦する

MySQL クエリにおける LIMIT の大きなオフセットによって引き起こされるパフォーマンス低下の分析

序文MySQLクエリはselectコマンドを使用し、limitとoffsetパラメータを使用して、指...

MySQLのデッドロックとログに関する詳細な説明

最近、MySQL オンラインでいくつかのデータ異常が発生しましたが、すべて早朝に発生しました。ビジネ...

Vueエンジニアがカプセル化しなければならない埋め込み命令の知識のまとめ

目次序文指導の基本フック機能フック関数のパラメータ文章使い方とアイデア成し遂げる汎用性を高める要約す...

MySQL 8.0.12 winx64 解凍バージョンのインストール グラフィック チュートリアル

mysql-8.0.12-winx64 解凍版のインストールを記録して、みんなで共有しました。 1....

JSはショッピングカート効果の単純な加算と減算を実装します

この記事の例では、ショッピングカートの簡単な追加と削除を実現するためのJSの具体的なコードを参考まで...

ウェブデザインと制作におけるハイパーリンクの効果の向上

ハイパーリンクを使用すると、ページからページへ、またはサイトからサイトへ瞬時に移動できます。このよう...

MySQLクエリ最適化プロセスを理解する

目次パーサーとプリプロセッサクエリオプティマイザーMySQL クエリの最適化には、解析、前処理、最適...

JavaScript 配列メソッドの詳細な例

目次導入配列の作成作成方法詳しい説明方法参加する() push() と pop() shift() ...

Dockerカスタムネットワークコンテナ相互接続

目次序文-リンクカスタムネットワーク質問する序文前回は、 -Linkパラメータを使用してコンテナ間の...

Vue要素のバックグラウンド認証プロセスの分析

序文:最近、プロジェクトで管理システムに遭遇しました。権限設定が非常に興味深いと思いました。自分の学...

Element PlusはAffixを実装します

目次1. コンポーネントの紹介2. ソースコード分析2.1 テンプレート2.2 スクリプト2.3 実...

MySQL インデックスのパフォーマンス最適化の問題に対する解決策

MySQL によって作成される最適化はインデックスを追加することですが、インデックスを追加しても目的...

Docker - コンテナマウントディレクトリを変更する3つの方法のまとめ

方法 1: 設定ファイルを変更する (docker サービスを停止する必要があります) 1. doc...

MySQL 使用仕様の概要

1. InnoDBストレージエンジンを使用する必要がありますCPU と IO のパフォーマンスが向上...

Ubuntu 19でdockerソースをインストールできない問題を共有する

主要な Web サイトと個人的な習慣に従って、Docker ソースを追加するには次の方法を使用します...