CSS が初期読み込み時の白い画面の時間に与える影響

CSS が初期読み込み時の白い画面の時間に与える影響

外部 CSS ファイルを使用したレンダリング パイプライン

上図では、HTML データの要求から DOM の構築までの間にアイドル時間があり、これがページ レンダリングのボトルネックになる可能性があります。 DOM が構築された後、次のステップはレイアウト ツリーを合成することであるため、レンダリング パイプラインは CSS ファイルがダウンロードされるまで待機します。複合レイアウト ツリーには CSSOM と DOM が必要なので、CSS が読み込まれて CSSOM に解析されるまで待つ必要があります。この場合、CSS は DOM の生成をブロックしません。

CSSOMの役割

  • JSにスタイルシートを操作する機能を提供する
  • レイアウトツリー合成のための基本的なスタイル情報を提供します

インライン JS と外部 CSS を含むページのレンダリング パイプライン

上図からわかるように、DOM 構築中に JS に遭遇すると、JS が現在の DOM を変更する可能性があるため、構築は停止され、JS が解析されて実行されます。

JS スクリプトを実行する前に、ページに外部 CSS またはインライン CSS が含まれている場合、レンダリング エンジンはそれらを事前に CSSOM に変換する必要があります。JS は CSSOM を変更する機能を持っているため、JS が実行される前に CSSOM にも依存します。つまり、CSS は場合によっては DOM 生成もブロックすることになります。

外部 JS および CSS を含むページのレンダリング パイプライン

要求された HTML データの事前解析プロセス中に、ダウンロードする必要がある外部 JS ファイルと CSS ファイルがあることが検出され、2 つのファイルのダウンロード要求が同時に開始されます。ダウンロード時間は重複せず、最も長い時間に基づいて計算されます。

CSS と JS のどちらが先に到着するかに関係なく、まず CSS ファイルがダウンロードされて CSSOM が生成されるまで待機し、次に JS スクリプトを実行し、最後に DOM とレイアウト ツリーを構築してページを描画する必要があります。

ページの表示と最適化戦略に影響を与える要因

URL を入力してからページが初めて表示されるまでには、次の 3 つの段階があります。

  1. リクエストが送信された後、データ送信段階になっても、ページには前のページの内容が引き続き表示されます。
  2. データを送信すると、レンダリング プロセスによって空白ページが作成されます。この期間は、解析ホワイト スクリーンと呼ばれます。CSS および JS ファイルの読み込みが完了するのを待機し、CSSOM および DOM を生成してから、レイアウト ツリー、XXX などの手順を合成して、最初のレンダリングの準備をします。
  3. 最初のレンダリングが完了すると、完全なページ生成フェーズが開始され、ページが少しずつ描画されます。

2 番目のステージは、HTML の解析、CSS のダウンロード、JavaScript のダウンロード、レイアウト ツリーの生成、ページの描画などの操作を含み、ユーザー エクスペリエンスに最も大きな影響を与えます。

最適化戦略

  1. CSS と JS をインライン化し、HTML がダウンロードされた直後にレンダリングを開始します。
  2. ファイル サイズを最小限に抑えるために、webpack はコメントを削除し、ファイルを圧縮します。
  3. HTML 解析段階で使用する必要のない一部の JS を async または defer でマークします。
  4. 大きな CSS ファイルの場合は、メディア クエリを使用して、さまざまな目的の CSS ファイルに分割し、特定のシナリオでのみ読み込むことができます。

以上がこの記事の全内容です。皆様の勉強のお役に立てれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。

<<:  MySQLの実行プロセスとシーケンスについての簡単な説明

>>:  Web アプリ開発時間を短縮する 10 の時間を節約するヒント (グラフィカル チュートリアル)

推薦する

MySQL 8.0.19 winx64 インストールチュートリアルと Windows 10 での初期パスワードの変更

この記事では、参考までにMySQL 8.0.19 winx64のインストールチュートリアルを紹介しま...

純粋な CSS で中空効果を実現するためのサンプルコード

私は最近、空洞化効果について研究しました。背景クリップ: テキスト背景はテキストの前景色にクリップさ...

Docker Compose を使用して nginx のロード バランシングを実装する方法

Dockerネットワーク管理とコンテナIP設定に基づいてNginxロードバランシングを実装するすべて...

Unicode における CJK (中国語、日本語、韓国語の統合表意文字) 文字の概要

CJK は CJK Unified Ideographs の略称で、「中国語、日本語、韓国語の統一表...

Web プロジェクト開発 VUE の混合と継承の原則

目次ミキシンMixin ノート (重複名)ローカルミックスイングローバル ミックスイン定義とグローバ...

MySQL 8.0.25 のインストールと設定方法のグラフィックチュートリアル

MySQL 8.0.25の最新のダウンロードとインストールのチュートリアルは参考になります。具体的な...

JavaScript の 3 つの BOM オブジェクト

目次1. 場所オブジェクト1. URL 2. 場所オブジェクトのプロパティ3. ロケーションオブジェ...

MySQLのパスワードを忘れた場合の対処方法

MySQL パスワードを忘れた場合の解決策: [root@localhost ~]# mysql -...

Dockerfileの指示と基本構造の説明

Dockerfile を使用すると、ユーザーはカスタム イメージを作成できます。基本構造Docker...

フォームデータを取得するための Node.js メソッドの 3 つの例

序文Nodejs はサーバーサイド言語です。開発中、登録やログインなどでは、判断のためにフォームを通...

Vueがsweetalert2プロンプトコンポーネントを統合する際の問題についてお話ししましょう

目次1. プロジェクト統合1. CDNインポート方法: 2. 箱の梱包を確認する3. 迅速な箱詰め4...

GZIP 圧縮 Tomcat と Web パフォーマンスの改善プロセス図

1. はじめに最近、あるプロジェクトに取り組んでいたのですが、サーバーからクライアントに返される J...

Linux で MySQL データベースのインポートおよびエクスポート コマンドを実装する方法

1. mysqldump コマンドを使用してデータベースをエクスポートします (このコマンドのパスで...

MySQLの高可用性アーキテクチャの詳細な説明

目次導入MySQL 高可用性マスター 1 つとバックアップ 1 つ: MySQL マスター スレーブ...

丸い角や鋭い角を表現するために、絵の代わりに文字を使用する研究

Google Gmail ページから撮った次のスクリーンショットをご覧ください (同じ場所からスクリ...