ホームページ > ウェブフロントエンド > CSSチュートリアル > クリティカル レンダリング パスとは何か、そしてそれを最適化する方法

クリティカル レンダリング パスとは何か、そしてそれを最適化する方法

Mary-Kate Olsen
リリース: 2024-12-04 19:04:12
オリジナル
337 人が閲覧しました

Qué es el Critical Rendering Path y cómo optimizarlo

クリティカル レンダリング パスとは何ですか?

クリティカル レンダリング パスは、ブラウザが HTML、CSS、JavaScript を画面上のピクセルに変換するために通過する一連のフェーズです。

  1. HTML を DOM (ドキュメント オブジェクト モデル) に解析します。
  2. CSSOM (CSS Object Model) で CSS を解析します。
  3. スクリプトを実行します。
  4. 画面上の要素のサイズと位置を計算します。
  5. ページをレンダリングします。

これらの手順はウェブサイトのパフォーマンスに直接影響するため、このプロセスを最適化したい場合は考慮しなければならないことがあります。

DOM の構築

ブラウザは HTTP 呼び出しを通じて HTML を受信します。受信するとすぐに、そのデータを使用して DOM の構築を開始します。

この DOM はノードに基づいて構築されており、各 HTML タグはノードに相当し、HTML 内の子要素も DOM ツリー内の子ノードになります。

ノードの数が多いほど、ページのレンダリング プロセスが完了するまでにかかる時間が長くなります。

CSSオブジェクトモデル

DOM にはページのコンテンツに関するすべての情報が含まれていますが、CSSOM にはそのコンテンツがどのように表示されるかに関するすべての情報が含まれています。

CSS 処理によりレンダリングがブロックされます。つまり、完全に処理されるまでは、以降の手順を続行して、最終的にコンテンツを画面に表示することはできません。これは、CSS ファイル内で数行上に適用されたスタイルが上書きされる場合があるためです。

レンダーツリー

DOM と CSSOM の準備ができたら、これらを結合して「レンダー ツリー」を作成します。これには、画面に表示される要素に関する必要な情報がすべて含まれます。このツリーでは、次の要素が表示されます。なし。およびその子孫、または タグ内にあるすべてのもの。

レイアウト

「レイアウト」フェーズでは、レンダー ツリー要素のサイズと他の要素との関係が定義されます。このプロセスは、Web ページにアクセスしている画面によって異なります。

指定しない場合、要素はデフォルトで親の幅の 100% になります。ブラウザによっては固定幅です。このため、この要素を に含める必要があります。私たちの文書から:


<head>
    <meta name="viewport" content="width=device-width" />
</head>
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ユーザーがモバイル デバイスを回転するたびに、画面上の要素とその配置が変更される可能性があるため、レイアウト プロセスが再度実行されます。

ノードの数が増えると、このプロセスが完了するまでに時間がかかるため、レイアウトは Web サイトのパフォーマンスに影響を与える可能性があります。レイアウト プロセスが遅いと、最初のページの読み込みが遅くなるだけでなく、一部のアニメーションの見栄えが悪くなります。

ページの絵

画面上のピクセルのペイントは、レンダリング プロセスの最後のステップです。最初のロード (onload) の後、変更が加えられたページの領域のみが再描画されるため、これは簡単な手順です。ブラウザは、このプロセスを不必要に実行しないようにすでに最適化されています。

CRPの最適化

このプロセスはさまざまな方法で最適化できますが、それぞれのケースは固有であり、最終的に重要なのは、プロジェクトに最適な対策を適用することです。

重要なリソースをできるだけ早くロードする

ブラウザは、ページにとって重要な画像、スタイル、スクリプトなどのリソースをできるだけ早くダウンロードするという考え方なので、これらの要素を

スクリプトや小さなスタイルであっても、インラインタグに入れることができます。

<head>
    <meta name="viewport" content="width=device-width" />
</head>
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

一方、ロードしているものが DOM の一部の要素を変更するスクリプトである場合は、すべてのノードを含むツリーが構築された後にそれをロードするという考え方になります。このような場合には、body タグの最後にそのスクリプトをロードする必要があります。

<head>
    <style>
        .foo {
            color: red;
        }
    </style>
</head>
ログイン後にコピー

スクリプトの読み込みを延期する

DOM を変更しないスクリプトの読み込みを延期することは、Web サイトの読み込み時間を短縮するために非常に良い方法です。これは、「async」属性と「defer」属性を使用して実行できます。

スクリプトを非同期として設定すると、このスクリプトはダウンロードされて独立して実行されるため、レンダリング プロセスはブロックされず、実行時間は任意です。

defer 属性を持つスクリプトは非同期でダウンロードされますが、ドキュメント内での順序が尊重されます。また、小さなスクリプトを大きなスクリプトの後に実行するかどうかを制御する良い方法です。

<html>
    <body>
        <!-- My content -->
        <script src="./path/to/my/script.js"></script>
    </body>
</html>
ログイン後にコピー

上記の例では、3 つのスクリプトが非同期的にダウンロードされます。最後のスクリプトの方が小さいため、最初にダウンロードされると想定します。最初のスクリプトは完全に独立してダウンロードおよび実行され、他の要素の準備が完了するのを待ったり、レンダリング プロセスをブロックしたりしません。いずれの場合も、defer 属性は順序を尊重するため、最後のスクリプトは 2 番目のスクリプトの後に実行されます。

メディアクエリによるスタイルの分離

画面上で必要なスタイルのみを読み込むことが考えられるため、パフォーマンスの最適化に役立つテクニックとしては、携帯電話に適用するかどうかに応じてページ スタイルを異なるファイルに分割することが考えられます。 、タブレット、デスクトップなど。 HTML では、これらのファイルはメディア クエリとともに読み込まれ、不必要なスタイルの読み込みが回避されます。

<head>
    <meta name="viewport" content="width=device-width" />
</head>
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

リソースを縮小する

ばかげているように思えるかもしれませんが、空白やコメントなどを削除するとブラウザがレンダー ツリーを構築するために必要な作業を軽減できるため、ファイルを縮小するとページのパフォーマンスが大幅に向上します。

結論

これらは、このプロセスを最適化するために留意すべきいくつかの点にすぎません。これを念頭に置くと、クリティカル レンダリング パスを最適化するようにすでに設計された高品質のコードを作成できる方が現実的です。

以上がクリティカル レンダリング パスとは何か、そしてそれを最適化する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:dev.to
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート