link rel='preload' を使ってリソースの優先順位を付ける

ページの onload イベントを遅らせることなく、ページで必要な重要なフォント、スクリプト、その他のリソースをブラウザに知らせたいと思ったことはありませんか?ウェブ デベロッパーは <link rel="preload"> を使用して、使い慣れた HTML 要素の構文と、いくつかの重要な属性を使用して正確な動作を判断できます。これは Chrome 50 リリースの一部としてリリースされるドラフト標準です。

<link rel="preload"> を介して読み込まれたリソースはブラウザ内にローカルに保存され、DOM、JavaScript、CSS で参照されるまで実質的に不活性化されます。たとえば、スクリプト ファイルがプリロードされていても、すぐに実行されないユースケースの 1 つとして、スクリプト ファイルが DOM の <script> タグを介して含まれていた場合と同じように実行されます。

<link rel="preload" href="used-later.js" as="script">
<!-- ...other HTML... -->
<script>
    // Later on, after some condition has been met, we run the preloaded
    // JavaScript by inserting a <script> tag into the DOM.
    var usedLaterScript = document.createElement('script');
    usedLaterScript.src = 'used-later.js';  
    document.body.appendChild(usedLaterScript)
</script>

どういうことでしょうか。この例で使用されている href 属性は、リンクされたリソースの URL を指定するために使用する標準属性であるため、ウェブ デベロッパーにはなじみがあるはずです。

しかし、as 属性はおそらく初めて使用するもので、<link> 要素のコンテキストで使用され、行われるプリロード リクエストの宛先に関する詳細情報をブラウザに提供します。この追加情報により、ブラウザで適切なリクエスト ヘッダーとリクエストの優先度が設定され、正しいリソース コンテキストに設定されている可能性がある関連するコンテンツ セキュリティ ポリシー ディレクティブが適用されます。

(大いに)学ぶ

Yoav Weiss は、<link rel="preload"> の使用に関する決定的なガイドを執筆しています。ご自身のページでも使用したいとお考えの方は、ぜひ Kenny の記事をお読みになり、クリエイティブのメリットや使用例をご確認ください。

<link rel="preload"> は、重大なバグと欠点があります(Chrome 以外のブラウザに実装されたことがない <link rel="subresource"> より優先されます)。そのため、Chrome 50 では <link rel="subresource">サポートを終了しました。