この Codelab では、rel="preload"
を使用してウェブフォントをプリロードし、スタイル設定されていないテキストのフラッシュ(FOUT)をすべて削除する方法について説明します。
測定
最適化を追加する前に、まずウェブサイトのパフォーマンスを測定します。
- サイトをプレビューするには、[アプリを表示] を押してから、全画面表示 を押します。
- Ctrl+Shift+J キー(Mac の場合は Command+Option+J キー)を押して DevTools を開きます。
- [Lighthouse] タブをクリックします。
- [カテゴリ] リストで [パフォーマンス] チェックボックスがオンになっていることを確認します。
- [Generate report] ボタンをクリックします。
生成された Lighthouse レポートの [クリティカル パスの最大レイテンシ] に、リソースの取得シーケンスが表示されます。
上記の監査では、ウェブフォントはクリティカル リクエスト チェーンの一部であり、最後に取得されます。クリティカル リクエスト チェーンは、ブラウザによって優先され、取得されるリソースの順序を表します。このアプリケーションでは、ウェブフォント(Pacfico と Pacifico-Bold)は @font-face ルールを使用して定義され、クリティカル リクエスト チェーンでブラウザによって取得される最後のリソースになります。通常、ウェブフォントは遅延読み込みされます。つまり、重要なリソース(CSS、JS)がダウンロードされるまで読み込まれません。
アプリケーションで取得されるリソースの順序は次のとおりです。
ウェブフォントのプリロード
FOUT を回避するには、すぐに必要なウェブフォントをプリロードしてください。ドキュメントの先頭に、このアプリケーションの Link
要素を追加します。
<head>
<!-- ... -->
<link rel="preload" href="/assets/Pacifico-Bold.woff2" as="font" type="font/woff2" crossorigin>
</head>
as="font" type="font/woff2"
属性は、このリソースをフォントとしてダウンロードするようブラウザに指示します。これは、リソースキューの優先順位付けに役立ちます。
crossorigin
属性は、フォントが別のドメインから取得される可能性があるため、CORS リクエストでリソースを取得する必要があるかどうかを示します。この属性がないと、プリロードされたフォントがブラウザで無視されます。
ページヘッダーには Pacifico-Bold が使用されているため、より迅速に取得できるようにプリロード タグを追加しました。Pacifico.woff2 フォントは、スクロールしなければ見えない範囲のテキストのスタイルを設定するため、これをプリロードすることは重要ではありません。
アプリケーションを再読み込みし、lighthouse を再度実行します。[クリティカル パス レイテンシの最大] セクションを確認します。
Pacifico-Bold.woff2
がクリティカル リクエスト チェーンからどのように削除されるかに注目してください。アプリケーション内の早い段階で取得される。
プリロードにより、ブラウザはこのファイルを先にダウンロードする必要があることを認識します。注意すべき点として、プリロードは、正しく使用しないと、使用されていないリソースに対して不要なリクエストを行うことにより、パフォーマンスを損なう可能性があるということです。