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 での位置の使用に関する簡単な紹介

推薦する

Angular のパフォーマンス最適化: サードパーティ コンポーネントと遅延読み込みテクノロジー

目次概要環境の準備プロジェクトのパフォーマンスに影響を与える要因遅延読み込みとは何ですか?プロジェク...

Vant+postcss-pxtoremはブラウザ適応機能を実装します

Remレイアウトの適応Vant のスタイルでは、デフォルトで px を単位として使用します。rem ...

MySQLカバーインデックスの利点

一般的な提案は、WHERE 条件のインデックスを作成することですが、これは実際には一方的です。インデ...

TomcatのmaxPostSize属性を設定する際に注意する必要がある問題を解決する

必要:近い将来、大容量ファイルのアップロード機能を実装します。フロントエンドフレームワークのアップロ...

CSS を使用して複数列の等高レイアウトを設定する方法の例

最初は、複数の列のコンテンツのサイズと高さが異なります。ここで、表示する背景を異なるものに設定し、各...

Windows 環境での MySQL の解凍、インストール、バックアップ、復元

システム環境はserver2012です1. MySQLの解凍バージョンをダウンロードし、インストール...

Node.js での SerialPort モジュールの使用

目次目的モジュールのインストール基本的な使い方ポートをスキャンする開いているポートデータの送信データ...

Linux 名前空間ユーザーの詳細な説明

ユーザー名前空間は Linux 3.8 で追加された新しい名前空間で、ユーザー ID やグループ I...

ARGB、RGB、RGBAの違いと紹介

ARGB は、アルファ (透明度) チャネルが追加された RGB カラー モードであり、32 ビット...

Linuxネットワーク設定の基本操作コマンドを詳しく解説

目次ネットワーク構成を表示するネットワークインターフェース情報を表示する---ifconfigルーテ...

MySQLの重複排除操作を極限まで最適化する方法

目次1. インデックスと変数の賢い使用1. インデックスなしの比較テスト2. created_tim...

MySQL の binlog ログと、binlog ログを使用してデータを回復する方法を説明します。

ご存知のとおり、binlog ログは MySQL データベースにとって非常に重要です。万が一、データ...

複数の Docker コンテナが同じポート番号を持たない場合の解決策

背景Dockerでは、同じイメージを使用して4つのコンテナを作成します。ネットワークはブリッジモード...

MySQL 8.0.14 のインストールと設定方法のグラフィックチュートリアル (一般)

MySQLサービス8.0.14のインストール(一般)の参考までに、具体的な内容は次のとおりです。イ...

nginxを使用して取得したIPアドレスが127.0.0.1である問題を解決する

IPツールを取得 lombok.extern.slf4j.Slf4j をインポートします。 org....