JavaScriptにおけるマクロタスクとミクロタスクの詳細
<スパン 1. マイクロタスクとは
public function test() {
//this xml has 2 root nodes: user and other
$xml = '
Name
99
study
you guess
1
';
$array = self::xmlToArray($xml);
var_export($array);
die;
}
//transform xml to array
public function xmlToArray($xml) {
if (! $xml) {
die('xml data exception');
}
// Disable references to external xml entities to prevent XXE injection
libxml_disable_entity_loader(true);//prohibit references to external xml entities
//transform XML to array
$arrayData = json_decode(json_encode(simplexml_load_string($xml, 'SimpleXMLElement', LIBXML_NOCDATA)), true);
return $arrayData;
}
そして
Entity: line 1: parser error : Extra content at the end of the document
2. マクロタスクとは
root
- イベント
-
// Add a root tag root to prevent the conversion from reporting an error due to multiple root tags: Extra content at the end of the document in file $xml = '
リクエスト '; $array = self::xmlToArray($xml); var_export($array); die;Name 99 study you guess 1
3. ケース
root
印刷の順番は次の通りであることがわかります。
array ( 'user' => array ( 'name' => 'name', 'age' => '99', 'hobby' => 'study', 'like' => 'you guess', ), 'other' => '1', )
なぜこの順番なのか?
1~4を先に印刷しても絶対に大丈夫です
なぜ、3を先に印刷し、次に2を印刷するのですか?
なぜなら、3は
0777
,
mkdir('file address', 0777, true); //true: recursive directory creation
chmod('file address', 0777);
はマイクロタスクである。
2は
0777
であり、マクロタスクである
マイクロタスクは、マクロタスクよりも早く実行されます。
つまり、2より先に実行されるのは3なのです
3.1 結論
- 非同期より同期、マクロよりマイクロ
- マイクロタスクはマクロタスクより早く実行されるha〜。
4. コード例
chmod -R 777 /var/www/web/public/2021.txt
4.1 コード解析
上記コードの実行状況を解析します。
は最初に実行されなければならない
1-4
次に、マイクロタスクが先で、マクロタスクによると
は3を出力し、3をポップアップすること
では、2を出力してポップアップするということです
setTimeout2
[エラー
の間に別のマイクロタスクとマクロタスクが存在するためです。
DOM
レンダリング
では、次に
dom
をレンダリングし、最後にマクロタスク
つまり、出力
1-4
の後に実行されます。
DOM
のレンダリングを行います。
出力2の前に、ポップアップで
setTimeout2
4.2 結論と応用例
Microtask" DOM rendering" マクロタスク 次の例を見てください。
この結論が適用されるシナリオ
エチャートはみんなやったことがある。イーチャートをレンダリングするときは知っています。
ノードをレンダリングさせる前に、ページの DOM がレンダリングされている必要があります。
そこで、monuted()のライフサイクルに入れるリクエストのタイミングを聞いてくる方がいます
これにより、返されたデータが間違いなくページ上で適切にレンダリングされるようになります。
実際、上記のこの結論からすると
クリエイテッドでデータをリクエストすることは全然できます。それが返ってきたら
DOMはレンダリングが終わっている必要があります。なぜなら、リクエストはマクロのタスクだからです。
マクロタスクの実行タイミングは、DOMがレンダリングされた後ですハ
この時点では、この記事の
JavaScript
JavaScriptのマクロタスクとマイクロタスクに関する記事は以上です。
JavaScript
コードにおけるマクロタスク、マイクロタスクの詳細については、BinaryDevelopの過去の記事を検索するか、以下の記事を引き続き閲覧してください。
関連
-
vue3レスポンシブ対応のためのsetup+ref+reactive
-
fetch ネットワークリクエストラッパーの説明例
-
要素ツリー制御によるvueTreeテーブル
-
Vueの要素ツリーコントロールに破線を追加する説明
-
vue3.0プロジェクトのアーキテクチャを構築するための便利なツール
-
Vueのフォームイベントのデータバインディングの説明
-
[解決済み] Error : 未定義のプロパティ 'map' を読み取ることができません。
-
[解決済み】ERROR エラーです。スイッチのname属性が指定されていないフォームコントロールの値アクセッサがない
-
HTML5 LocalStorage ローカルストレージとセッションストレージの使用法
-
モジュールのビルドに失敗しました。Error: ENOENT: no such file or directory, scandir 'D:\.... \node_modules
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
jsを使った簡単な照明スイッチのコード
-
HTML+CSS+JavaScriptで簡単な三目並べゲームを作成する。
-
Vueのフィルタの説明
-
[解決済み] テスト
-
[解決済み】Node Version Manager のインストール - nvm コマンドが見つかりません。
-
[解決済み】JavaScriptの配列でforEachが関数でない不具合
-
[解決済み】エラー。Ionic使用中にモジュール '../lib/utils/unsupported.js' が見つかりませんでした。
-
[解決済み】<select>で現在選択されている<option>をJavaScriptで取得するにはどうすればよいですか?
-
OSSアップロードエラーを解決する: net::ERR_SSL_PROTOCOL_ERROR
-
引数リストエラーの後に ) がない