DOMContentLoadedとロードまず、その後の分析に役立つ 2 つのイベントを理解しましょう。 ロード イベント: ロードは、完全に読み込まれたページを検出する場合にのみ使用してください。ロード イベントは、リソースとその依存リソースの読み込みが完了したときに発生します。つまり、ロード イベントは、ページの HTML、CSS、JS、画像、その他のリソースが読み込まれた後にのみトリガーされます。 DOMContentLoaded イベント: DOMContentLoaded イベントは、スタイルシート、画像、サブフレームの読み込みが完了するのを待たずに、最初の HTML ドキュメントが完全に読み込まれて解析されたときにトリガーされます。つまり、DOM ツリーが構築されたときに DOMContentLoaded イベントがトリガーされます。 js ブロッキングとは何ですか?JS は実行中に DOM を操作し、リフローと再描画を行う可能性があるため、GUI レンダリング スレッドと JS エンジン スレッドは相互に排他的です。 HTML を解析するときにスクリプト タグが検出されると、レンダリング スレッドはレンダリング プロセスを一時停止し、制御を JS エンジンに渡します。インライン js コードは直接実行されます。外部 js ファイルの場合は、js ファイルをダウンロードし、ダウンロード完了後に実行する必要があります。 JS エンジンの実行が終了すると、ブラウザはレンダリング スレッドに制御を返し、DOM の解析を続行します。 したがって、js は DOM ツリーの構築をブロックします。 それで、ページの表示がブロックされるのでしょうか?次のコードでテストしてみましょう。 <!DOCTYPE html> <html lang="ja"> <ヘッド> <メタ文字セット="UTF-8"> <meta http-equiv="X-UA-compatible" content="IE=edge"> <meta name="viewport" content="width=デバイス幅、初期スケール=1.0"> <title>ドキュメント</title> </head> <本文> <div>こんにちは世界</div> <スクリプト> デバッガ </スクリプト> <div>こんにちは世界2</div> </本文> </html> このページの DOMContentLoaded は 2.23 秒で発生しており、js が DOM ツリーの構築をブロックしていることがわかります。ただし、hello world はほぼ瞬時にページに表示されるため、js はそれ以前の DOM 要素のレンダリングをブロックしないことがわかります。 より良いユーザー エクスペリエンスを実現するために、最新のブラウザー レンダリング エンジンは、コンテンツをできるだけ早く画面に表示しようとします。レンダリング ツリーをレイアウトする前に、すべての DOM 解析が完了するまで待機しません。代わりに、js ブロッキングが発生すると、すでに構築された DOM 要素が画面にレンダリングされ、白い画面の時間が短縮されます。 そのため、前のページのレンダリングに影響を与えないように、スクリプト タグを body タグの下部に配置します。 CSS ブロッキングとは何ですか?HTML を解析するときにリンク タグまたはスタイル タグに遭遇すると、スタイルを計算して CSSOM を構築します。 CSS は DOM ツリーの構築をブロックしませんが、ページの表示をブロックします。まだ例を使ってテストしてみましょう: <!DOCTYPE html> <html lang="ja"> <ヘッド> <メタ文字セット="UTF-8"> <meta http-equiv="X-UA-compatible" content="IE=edge"> <meta name="viewport" content="width=デバイス幅、初期スケール=1.0"> <title>ドキュメント</title> <link rel="スタイルシート" type="text/css" href="https://h5.sinaimg.cn/m/weibo-pro/css/chunk-vendors.d6cac585.css"> </head> <本文> <div class="woo-spinner-filled">こんにちは世界</div> <div>こんにちは世界2</div> </本文> </html> 外部 CSS ファイルを使用して Slow 3G を開き、より遅いネットワーク速度をシミュレートします。DOMContentLoaded イベントがトリガーされるまでに 30 ミリ秒しかかからないことがわかります。この時点ではページはまだ空白で、loaded イベントが発生してから約 2.92 秒経過するまでコンテンツはページに表示されません。 その理由は、ブラウザは CSSOM の構築中に処理されたコンテンツを一切レンダリングしないからです。 DOM が解析されていても、CSSOM が構築されない限り、ページにはコンテンツが表示されません。 CSSOM はリンク タグまたはスタイル タグに遭遇した場合にのみ構築されるため、リンク タグの前に DOM 要素があると、CSS の読み込み時にブロックが発生します。 <本文> <div class="woo-spinner-filled">こんにちは世界</div> <link rel="スタイルシート" type="text/css" href="https://h5.sinaimg.cn/m/weibo-pro/css/chunk-vendors.d6cac585.css"> <div>こんにちは世界2</div> </本文> そうすると、ページがちらつくという問題が発生します。CSS が読み込まれる前に、ブラウザはデフォルトのスタイルに従って <div class="woo-spinner-filled">hello world</div> をレンダリングします。CSS が読み込まれると、div の新しいスタイルが計算され、再レンダリングされるため、ちらつきが発生します。 ページのちらつきを避けるために、リンク タグは通常、ヘッダーに配置されます。 CSS は後続の js 実行をブロックしますか?答えはイエスです! JS は変更に関するもので、コンテンツ、スタイル、ユーザー操作への応答など、Web ページのあらゆる側面を変更するのに役立ちます。変更のこれらの「すべての側面」は、本質的には DOM と CSSDOM に対する変更です。 CSSDOM 内の要素のスタイルが JS でアクセスされる場合、JS スクリプトの実行を続行する前に、スタイルがダウンロードされるまで待つ必要があります。 次の例を実行すると、CSS が読み込まれた後にのみコンソールに「this is a test」と表示されることがわかります。 <!DOCTYPE html> <html lang="ja"> <ヘッド> <メタ文字セット="UTF-8"> <meta http-equiv="X-UA-compatible" content="IE=edge"> <meta name="viewport" content="width=デバイス幅、初期スケール=1.0"> <title>ドキュメント</title> <link rel="スタイルシート" type="text/css" href="https://h5.sinaimg.cn/m/weibo-pro/css/chunk-vendors.d6cac585.css"> </head> <本文> <div class="woo-spinner-filled">こんにちは世界</div> <div>こんにちは世界2</div> <スクリプト> console.log('これはテストです') </スクリプト> </本文> </html> 最適化インライン JavaScript と CSS を使用して、HTML ファイルを取得した直後にレンダリング プロセスを開始できるようにします。 すべての状況がインライン化に適しているわけではないので、無駄なコードを削除したり、webpack などの構築ツールを使用して CSS ファイルと JavaScript ファイルのサイズを圧縮したり、CDN を有効にしてファイルのダウンロードを高速化したりして、ファイル サイズを縮小することもできます。 大きな CSS ファイルの場合は、メディア クエリ属性を使用して、さまざまな目的に合わせて複数の CSS ファイルに分割し、特定の CSS ファイルが特定のシナリオでのみ読み込まれるようにすることができます。 JavaScript ファイルに DOM 関連のコードがない場合、コードに async または defer をマークすることで、JavaScript スクリプトを非同期で読み込むように設定できます。 <script src="index.js"></script> // ブラウザは、他の処理を実行する前に、index.js が読み込まれて実行されるまで待機する必要があります。 <スクリプト非同期src="index.js"></スクリプト> //index.js の読み込みは非同期であり、読み込み中にブラウザが他の操作を行うことをブロックしません。 // 読み込みが完了すると、JS スクリプトがすぐに実行されます。 <script を延期 src="index.js"></script> //JS の読み込みは非同期であり、実行は延期されます。 //defer でマークされたスクリプト ファイルは、ドキュメント全体が解析され、実行されてから DOMContentLoaded イベントがトリガーされるまで待機します。 要約するjs と css のブロッキング問題についての記事はこれで終わりです。より関連性の高い js と css のブロッキング コンテンツについては、123WORDPRESS.COM の以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。 以下もご興味があるかもしれません:
|
<<: Windows での MySQL コミュニティ サーバー 8.0.16 のインストールと構成方法のグラフィック チュートリアル
>>: Nexus を使用して Docker リポジトリを作成する方法
MySQL で遅い SQL ステートメントを見つけるにはどうすればよいでしょうか?これは、多くの人を...
目次依存関係をインストールするブーストをインストールMySQLをコンパイルしてインストールする構成依...
各 Web ページには、URL () で識別されるアドレスがあります。通常、Web サイト内でリンク...
1. HTMLの概要1.HTML: ハイパーテキスト マークアップ言語。これはプログラミング言語では...
現在、.net Core はクロスプラットフォームであり、誰もが Linux と Docker を使...
Linuxにフラッシュをインストールする方法1. Flashの公式サイトにアクセスし、ダウンロードを...
目次序文1. オブジェクト.freeze() 2. オブジェクト.seal() 3. オブジェクト....
最近、センタリングの問題に数多く遭遇したので、後で簡単に見つけられるように、時間をかけてそれらを要約...
まず第一に、この効果は古い話題であるはずだということはわかっています。今日ファイルを整理していたら、...
今日 テーブル名から * を選択します。ここで、to_days(時間フィールド名) = to_day...
目次ネットワーク情報ホスト名を変更するDNSドメイン名解決ネットワーク関連コマンドファイアウォール暗...
テーブルを美しくするために、行ごとに異なる境界線の色を設定できます。基本的な構文<TR 境界線...
CSS ファイルでは、フォント名が文字化けしていることがよくあります。これは、作成者が中国語フォン...
<br />前の記事:Webデザインチュートリアル(5):Webビジュアルデザイン。 1...
目次序文$属性例: $listeners (公式説明)使用シナリオ要約する序文複数レベルのコンポーネ...