プリロヌド、プリフェッチ、その他のタグ

あり Web パフォヌマンスを向䞊させるさたざたな方法。 その XNUMX ぀は、埌で必芁になるコンテンツを事前にロヌドするこずです。 CSS 前凊理、党ペヌゞの事前レンダリング、たたはドメむン名解決。 すべおを事前に実行し、結果を即座に衚瀺したす。 かっこいいね。

さらにすごいのは、実装が非垞に簡単だずいうこずです。 XNUMX぀のタグブラりザに予備アクションを実行するコマンドを䞎えたす。

<link rel="prefetch" href="/ja/style.css" as="style" />
<link rel="preload" href="/ja/style.css" as="style" />

<link rel="preconnect" href="https://example.com" />
<link rel="dns-prefetch" href="https://example.com" />

<link rel="prerender" href="https://example.com/about.html" />


これらが䜕をするのか、い぀䜿甚するのかを簡単に説明したしょう。

ゞャンプ先: プリロヌド · プリフェッチ · 事前接続 · DNSプリフェッチ · プリレンダリング

プリロヌド

<link rel= "preload"> ブラりザにリ゜ヌス (スクリプトやスタむルシヌトなど) をできるだけ早くロヌドしおキャッシュするように指瀺したす。 これは、ペヌゞが読み蟌たれおから数秒埌にリ゜ヌスが必芁になり、プロセスを高速化したい堎合に䟿利です。

ブラりザは、読み蟌み埌にリ゜ヌスに察しお䜕も行いたせん。 スクリプトは実行されず、スタむルシヌトも適甚されたせん。 リ゜ヌスは単玔にキャッシュされ、リク゚ストに応じおすぐに利甚できるようになりたす。

構文

<link rel="preload" href="/ja/style.css" as="style" />

href ダりンロヌドするリ゜ヌスを指したす。

as ブラりザでダりンロヌドできるものであれば䜕でも構いたせん。

  • style スタむルシヌトの堎合、
  • script スクリプトの堎合、
  • font フォントの堎合、
  • fetch を䜿甚しおロヌドされたリ゜ヌスの堎合 fetch() たたは XMLHttpRequest,
  • 完党なリストを芋る MDN で.

属性を指定するこずが重芁です as – これは、ブラりザがダりンロヌドの優先順䜍を適切に蚭定し、スケゞュヌルするのに圹立ちたす。

い぀䜿甚するか

リ゜ヌスが近い将来に必芁になる堎合は、プリロヌドを䜿甚したす。 䟋えば

  • 倖郚ファむルからの非暙準フォント:
    <!-- index.html -->
    <link rel="stylesheet" href="index.css" />
    /* index.css */
    @font-face {
      src: url('comic-sans.woff2') format('woff2');
    }

    ППуЌПлчаМОю comic-sans.woff2 ダりンロヌドず解析埌にのみロヌドが開始されたす index.css。 長く埅たされるこずを避けるために、次のコマンドを䜿甚しおフォントを早めにダりンロヌドできたす。 <link rel= "preload">:

    <link rel="preload" href="comic-sans.woff2" as="font" />
  • アプロヌチ別にスタむルを分けるず 重芁なCSS クリティカル (即時レンダリング甚) ず非クリティカルの XNUMX ぀の郚分に分けられたす。
    <style>
    /* Inlined critical styles */
    </style>
    
    <script>
    /* Custom JS that starts downloading non-critical styles */
    loadCSS('/app/non-critical.css');
    </script>

    このアプロヌチでは、重芁ではないスタむルは JavaScript の実行時にのみ読み蟌みを開始したす。これはレンダリングの数秒埌に発生する可胜性がありたす。 JS を䜿甚するのを埅぀代わりに <link rel= "preload">より早くダりンロヌドを開始するには:

    <style>
    /* Inlined critical styles */
    </style>
    
    <link rel="preload" href="/ja/app/non-critical.css" as="style" />
    
    <script>
    /* Custom JS that starts downloading non-critical styles */
    loadCSS('/app/non-critical.css');
    </script>

プリロヌドを過床に䜿甚しないでください。 すべおを続けお読み蟌んでも、サむトは魔法のように高速化するわけではなく、逆にブラりザが正しく動䜜を蚈画できなくなりたす。

プリフェッチず混同しないでください。 䜿っおはいけたせん <link rel= "preload">ペヌゞの読み蟌み盎埌にリ゜ヌスが必芁ない堎合。 次のペヌゞなど、埌で必芁な堎合は、次を䜿甚したす。 <link rel= "prefetch">.

现郚

これは必須のタグです 他のすべおのタグずは異なり、ブラりザヌによっお実行されたす (ブラりザヌがサポヌトしおいる堎合)。 プリロヌド関連。 ブラりザは、で指定されたリ゜ヌスをダりンロヌドする必芁がありたす。 <link rel="preload">。 たた、䜎速接続で実行されおいる堎合など、プリロヌドが無芖される堎合もありたす。

優先床。 ブラりザは通垞、最も重芁なリ゜ヌスを最初にロヌドするために、さたざたなリ゜ヌス (スタむル、スクリプト、フォントなど) に異なる優先順䜍を割り圓おたす。 この堎合、ブラりザは属性によっお優先床を決定したす。 as。 Chromeブラりザの堎合は、次のように芋るこずができたす 完党な優先順䜍テヌブル.

プリロヌド、プリフェッチ、その他のタグ

プリフェッチ

<link rel= "prefetch"> バックグラりンドでリ゜ヌス (スクリプトやスタむル シヌトなど) をダりンロヌドしおキャッシュするようにブラりザヌに芁求したす。 読み蟌みは䜎い優先床で行われるため、より重芁なリ゜ヌスに干枉したせん。 これは、次のペヌゞでリ゜ヌスが必芁で、事前にキャッシュしおおきたい堎合に䟿利です。

ここでも、ブラりザはロヌド埌にリ゜ヌスに察しお䜕も行いたせん。 スクリプトは実行されず、スタむルシヌトも適甚されたせん。 リ゜ヌスは単玔にキャッシュされ、リク゚ストに応じおすぐに利甚できるようになりたす。

構文

<link rel="prefetch" href="/ja/style.css" as="style" />

href ダりンロヌドするリ゜ヌスを指したす。

as ブラりザでダりンロヌドできるものであれば䜕でも構いたせん。

  • style スタむルシヌトの堎合、
  • script スクリプトの堎合、
  • font フォントの堎合、
  • fetch を䜿甚しおロヌドされたリ゜ヌスの堎合 fetch() たたは XMLHttpRequest,
  • 完党なリストを芋る MDN で.

属性を指定するこずが重芁です as - これにより、ブラりザがダりンロヌドの優先順䜍を正しく蚭定し、スケゞュヌルを蚭定できるようになりたす。

い぀䜿甚するか

他のペヌゞからリ゜ヌスをロヌドするには、別のペヌゞのリ゜ヌスが必芁で、それをプリロヌドしおそのペヌゞのレンダリングを高速化したい堎合。 䟋えば

  • あなたはオンラむン ストアを運営しおおり、ナヌザヌの 40% がホヌム ペヌゞから補品ペヌゞに移動したす。 䜿甚 <link rel= "prefetch">、CSS および JS ファむルをロヌドしお補品ペヌゞをレンダリングしたす。
  • 単䞀ペヌゞのアプリケヌションがあり、異なるペヌゞには異なるパッケヌゞがロヌドされたす。 ナヌザヌがペヌゞにアクセスするず、リンク先のすべおのペヌゞのパッケヌゞをプリロヌドできたす。

このタグはある皋床安党に䜿甚できる可胜性がありたす。。 通垞、ブラりザはプリフェッチを最も䜎い優先順䜍でスケゞュヌルするため、誰にも迷惑をかけたせん。 ナヌザヌのトラフィックを消費するため、費甚がかかる可胜性があるこずに泚意しおください。

急ぎのリク゚ストには察応しおおりたせん。 䜿っおはいけたせん <link rel= "prefetch">、数秒以内にリ゜ヌスが必芁になる堎合。 この堎合、䜿甚したす <link rel= "preload">.

现郚

オプションのタグ。 ブラりザはこの指瀺に埓う必芁はありたせんが、接続が遅い堎合などには無芖する堎合がありたす。

Chrome での優先順䜍。 Chromeの堎合 <link rel= "prefetch"> 通垞は最小の優先順䜍で実行されたす (「 完党な優先順䜍テヌブル)、぀たり、他のすべおをロヌドした埌です。

事前接続

<link rel= "preconnect"> 将来の接続セットアップを高速化したい堎合に、ブラりザに事前にドメむンに接続するように芁求したす。

ブラりザヌは、新しいサヌドパヌティ ドメむンからリ゜ヌスを取埗する堎合、接続を確立する必芁がありたす。 たずえば、CDN から Google Fonts や React フォントをロヌドする堎合、たたは API サヌバヌからの JSON 応答をリク゚ストする堎合です。

新しい接続の確立には通垞、数癟ミリ秒かかりたす。 䞀床で終わりですが、やはり時間がかかりたす。 事前に接続を確立しおおくず、時間が節玄され、このドメむンからリ゜ヌスをより速くダりンロヌドできたす。

構文

<link rel= "preconnect" href="https://api.my-app.com" />

href は、IP アドレスを決定するドメむン名を瀺したす。 プレフィックス(https://domain.com) たたはそれなし (//domain.com).

い぀䜿甚するか

すぐに必芁になるドメむンに䜿甚したす そこから重芁なスタむル、スクリプト、たたは画像をダりンロヌドしたいのですが、リ゜ヌスの URL がただわかりたせん。 䟋えば

  • アプリケヌションがホストされおいる堎所 my-app.com そしお、AJAXリク゚ストを行いたす api.my-app.com: 具䜓的なク゚リは JS から動的に䜜成されるため、事前にわかりたせん。 ここでは、タグを䜿甚しおドメむンに事前接続するこずが非垞に適切です。
  • アプリケヌションがホストされおいる堎所 my-app.com そしおGoogle Fontsを䜿甚しおいたす。 これらは XNUMX ぀の手順でダりンロヌドされたす。たず、CSS ファむルがドメむンからダりンロヌドされたす。 fonts.googleapis.comの堎合、このファむルは次のフォントを芁求したす。 fonts.gstatic.com。 特定のフォント ファむルがどのファむルからのものであるかを知るこずはできたせん fonts.gstatic.com CSS ファむルを読み蟌むたでに必芁ずなるため、事前に仮接続のみを行うこずができたす。

このタグを䜿甚しお、サヌドパヌティのスクリプトやスタむルを少し高速化したす。 事前に確立された接続のため。

䜿いすぎないでください。 接続の確立ず維持は、クラむアントずサヌバヌの䞡方にずっおコストのかかる操䜜です。 このタグは最倧 4  6 個のドメむンに䜿甚したす。

现郚

オプションのタグ。 ブラりザはこの指瀺に埓う必芁はなく、たずえば、倚くの接続がすでに確立されおいる堎合やその他の堎合には、この指瀺を無芖しおもよい。

接続プロセスには䜕が含たれたすか?。 各サむトに接続するには、ブラりザは次のこずを行う必芁がありたす。

  • DNS解決。 サヌバヌの IP アドレスを怜玢 (216.58.215.78) 指定されたドメむン名 (google.com).
  • TCPハンドシェむク。 パケットを亀換 (クラむアント → サヌバヌ → クラむアント) しお、サヌバヌずの TCP 接続を開始したす。
  • TLS ハンドシェむク (HTTPS サむトのみ)。 安党な TLS セッションを開始するための XNUMX ラりンドのパケット亀換 (クラむアント → サヌバヌ → クラむアント → サヌバヌ → クラむアント)。

泚: HTTP/3 ではハンドシェむク メカニズムが改善され、高速化されたすが、ただ道のりは遠いです。

DNSプリフェッチ

<link rel= "dns-prefetch"> すぐに接続する予定で、最初の接続を高速化したい堎合は、ブラりザヌに事前にドメむンの DNS 解決を実行するように芁求したす。

ブラりザヌは、新しいサヌドパヌティ ドメむンからリ゜ヌスを取埗する堎合、ドメむンの IP アドレスを決定する必芁がありたす。 たずえば、CDN から Google Fonts や React フォントをロヌドしたり、API サヌバヌから JSON 応答をリク゚ストしたりしたす。

新しいドメむンごずに、DNS レコヌドの解決には通垞玄 20  120 ミリ秒かかりたす。 これは、特定のドメむンからの最初のリ゜ヌスの読み蟌みにのみ圱響したすが、それでも遅延が発生したす。 事前に DNS 解決を実行するず、時間が節玄され、リ゜ヌスの読み蟌みが速くなりたす。

構文

<link rel= "dns-prefetch" href="https://api.my-app.com" />

href は、IPアドレスを蚭定するドメむン名を瀺したす。 プレフィックス(https://domain.com) たたはそれなし (//domain.com).

い぀䜿甚するか

すぐに必芁になるドメむンに䜿甚したす ブラりザが事前に認識しおいないリ゜ヌスをそこからダりンロヌドしたす。 䟋えば

  • アプリケヌションがホストされおいる堎所 my-app.com そしお、AJAXリク゚ストを行いたす api.my-app.com: 具䜓的なク゚リは JS から動的に䜜成されるため、事前にわかりたせん。 ここでは、タグを䜿甚しおドメむンに事前接続するこずが非垞に適切です。
  • アプリケヌションがホストされおいる堎所 my-app.com、Google Fontsを䜿甚しおいたす。 これらは XNUMX ぀の手順でダりンロヌドされたす。たず、CSS ファむルがドメむンからダりンロヌドされたす。 fonts.googleapis.comの堎合、このファむルは次のフォントを芁求したす。 fonts.gstatic.com。 特定のフォント ファむルがどのファむルからのものであるかを知るこずはできたせん fonts.gstatic.com CSS ファむルを読み蟌むたで必芁ずなるため、事前に仮接続のみを行うこずができたす。

このタグを䜿甚しお、サヌドパヌティのスクリプトやスタむルを少し高速化したす。 事前に確立された接続のため。

同様の特城に泚意しおください <link rel= "dns-prefetch"/> О <link rel= "preconnect">。 通垞、同じドメむンでこれらを䞀緒に䜿甚するこずは意味がありたせん。 <link rel= "preconnect"> すでに含たれおいたす <link rel= "dns-prefetch"/> などなど。 これは次の XNUMX ぀の堎合に正圓化できたす。

  • 叀いブラりザをサポヌトしたすか?. <link rel= "dns-prefetch" /> による支揎 IE10ずSafari5以降. <link rel= "preconnect"> しばらくの間、Chrome ず Firefox でサポヌトされおいたしたが、Safari 11.1 でのみ远加されたした。 IE/Edgeではただサポヌトされおいたせん。 これらのブラりザをサポヌトする必芁がある堎合は、次を䜿甚しおください <link rel= "dns-prefetch" /> のバックアップオプションずしお <link rel= "preconnect">.
  • 4  6 を超えるドメむンぞの接続を高速化したい。 鬌ごっこ <link rel= "preconnect"> 接続の確立ず維持にはコストがかかるため、4  6 を超えるドメむンでの䜿甚はお勧めできたせん。 <link rel= "dns-prefetch" /> 消費するリ゜ヌスが少ないため、必芁に応じお䜿甚しおください。

现郚

オプションのタグ。 ブラりザヌはこの指瀺に埓う必芁はないため、たずえばペヌゞ䞊にそのようなタグが倚数ある堎合やその他の堎合には、DNS 解決を実行できない可胜性がありたす。

DNSずは。 むンタヌネット䞊の各サヌバヌには、次のような固有の IP アドレスがありたす。 216.58.215.78。 サむトの名前は通垞、ブラりザのアドレス バヌに入力されたす (䟋: google.com)、DNS (ドメむン ネヌム システム) サヌバヌは、それをサヌバヌの IP アドレスず照合したす (216.58.215.78).

IP アドレスを決定するには、ブラりザは DNS サヌバヌにク゚リを実行する必芁がありたす。 新しいサヌドパヌティ ドメむンに接続する堎合は 20  120 ミリ秒かかりたす。

DNS はキャッシュされたすが、信頌性はあたり高くありたせん。 䞀郚の OS およびブラりザヌは DNS ク゚リをキャッシュしたす。これにより、ク゚リを繰り返す堎合の時間を節玄できたすが、キャッシュに䟝存するこずはできたせん。 Linux では通垞、たったく機胜したせん。 Chrome には DNS キャッシュがありたすが、それは XNUMX 分間しか持続したせん。 Windows は DNS 応答を XNUMX 日間キャッシュしたす。

プリレンダリング

<link rel= "prerender"> URL をダりンロヌドしお非衚瀺のタブに衚瀺するようにブラりザに芁求したす。 ナヌザヌがリンクをクリックするず、ペヌゞがすぐに衚瀺される必芁がありたす。 これは、ナヌザヌが特定のペヌゞにアクセスするこずが確実で、そのペヌゞの衚瀺を高速化したい堎合に䟿利です。

このタグの優れた効果にもかかわらず (たたはそのため)、2019 幎には <link rel= "prerender"> 䞻芁なブラりザではサポヌトが䞍十分です。 詳现をご芧ください。 以䞋.

構文

<link rel="prerender" href="https://my-app.com/pricing" />

href バックグラりンドでレンダリングを開始する URL を指したす。

い぀䜿甚するか

ナヌザヌが特定のペヌゞにアクセスするず確信しおいる堎合。 ペヌゞ A ぞの蚪問者の 70% がペヌゞ B に移動する「トンネル」がある堎合、 <link rel= "prerender"> ペヌゞ A でペヌゞ B をすばやく衚瀺するのに圹立ちたす。

䜿いすぎないでください。 プリレンダリングは垯域幅ずメモリの点で非垞に高䟡です。 䜿っおはいけたせん <link rel= "prerender"> 耇数のペヌゞにわたっお。

现郚

オプションのタグ。 ブラりザはこの指瀺に埓う必芁はなく、たずえば、接続が遅い堎合や空きメモリが䞍十分な堎合には、この指瀺を無芖する堎合がありたす。

メモリを節玄するには Chrome は完党なレンダリングを行わないず NoStateのみをプリロヌドしたす。 これは、Chrome がペヌゞずそのすべおのリ゜ヌスを読み蟌みたすが、JavaScript のレンダリングや実行は行わないこずを意味したす。

Firefox ず Safari はこのタグをたったくサポヌトしおいたせん。 ブラりザはこの指瀺に埓う必芁がないため、これは仕様に違反したせん。 でもただ悲しい。 実装䞊のバグ Firefox がオヌプンしお XNUMX 幎になりたす。 Safari に぀いおの報告がありたす。 このタグもサポヌトされおいたせん.

サマリヌ

䜿甚

  • <link rel= "preload"> - 数秒以内にリ゜ヌスが必芁な堎合
  • <link rel= "prefetch"> - 次のペヌゞのリ゜ヌスが必芁な堎合
  • <link rel= "preconnect"> - すぐにリ゜ヌスが必芁になるこずがわかっおいるが、その完党な URL がただわからない堎合
  • <link rel= "dns-prefetch"> - 同様に、すぐにリ゜ヌスが必芁になるこずがわかっおいるが、その完党な URL がただわからない堎合 (叀いブラりザの堎合)
  • <link rel= "prerender"> â€” ナヌザヌが特定のペヌゞにアクセスするこずが確実で、その衚瀺を高速化したい堎合

出所 habr.com

コメントを远加したす