ウェブパフォーマンス
ウェブパフォーマンスは客観的な測定値と、読み込み時や実行時のユーザーエクスペリエンスの知覚状況から成ります。ウェブパフォーマンスとは、サイトが読み込まれるまでの時間、操作可能・応答可能になるまでの時間、そしてユーザーが操作する際のコンテンツのスムーズさを意味します。スクロールはスムーズか、ボタンはクリックしやすいか、ポップアップはすぐに読み込まれて表示されるか、表示の際にスムーズにアニメーションするか。ウェブパフォーマンスには、読み込み時間、 1 秒あたりのフレーム数、操作可能になるまでの時間などの客観的な測定値と、コンテンツが読み込まれるまでにどのくらいの時間がかかったように感じたかという主観的な体験の両方が含まれます。
サイトが応答するまでの時間が長ければ長いほど、ユーザーはそのサイトを放棄する傾向があります。読み込み時間と応答時間を最小限に抑え、さらに機能を追加して遅延を隠すことで、できるだけ早く、できるだけ利用可能でインタラクティブな体験を提供し、一方で、体験のロングテール部分では非同期的に読み込みを行うことが重要です。
ウェブパフォーマンスの測定と改善に役立つツール、API、およびベストプラクティスがあります。 この章でそれらをカバーします。
キーパフォーマンスガイド
- dns-prefetch の使用
DNS-prefetch` はリソースがリクエストされる前にドメイン名を解決しようとする試みです。これは後で読み込まれるファイルであったり、ユーザーが辿ろうとするリンク対象であったりします。
- アニメーションのパフォーマンスとフレームレート
ウェブ上でのアニメーションは、
SVGAnimationElement
、window.requestAnimationFrame
(canvas
やWebGL_API
を含む)、CSS のanimation
、video
、アニメーション GIF、さらにアニメーション PNG やその他の種類の画像もあります。CSS プロパティをアニメーションさせることによるパフォーマンスコストは、プロパティによって異なり、高価な CSS プロパティをアニメーションさせると、ブラウザーが滑らかなFPSを実現するのに苦労し、jankとなることがあります。- ナビゲーションおよびリソースタイミング
ナビゲーションタイミングは、ブラウザーによる文書ナビゲーションイベントを測定する指標です。リソースタイミングは、アプリケーションのリソースの読み込みに関する詳細なネットワークタイミングの測定値です。どちらも同じ読み取り専用のプロパティを提供しますが、ナビゲーションタイミングはメイン文書の時間を測定するのに対し、リソースタイミングはそのメイン文書内の呼び出されるすべての資産やリソース、およびリソースのリクエストされたリソースの時刻を提供します。
- パフォーマンスの基礎
パフォーマンスとは、効率性を意味します。この文書では、オープンウェブアプリの観点から、パフォーマンスとは何か、ブラウザープラットフォームでどのようにパフォーマンスを向上させるか、テストや改善にどのようなツールやプロセスを使用できるかについて一般的な説明をします。.
- ページの生成: ブラウザーの動作の仕組み
ユーザーは、読み込みが速く、スムーズに操作できるコンテンツを、ウェブで体験することを求めています。したがって、開発者はこれらふたつの目標を達成するために努力しなければいけません。
- 投機的読み込み
投機的読み込み (Speculative loading) とは、関連するページが実際に訪問される前に、ユーザーが次に訪問する可能性の高いページに関する予測に基づいて、ナビゲーションのアクション(DNS 読み込み、リソースの読み込み、文書のレンダリングなど)を実行することを指します。
- 遅延読み込み
遅延読み込み (Lazy loading) とは、リソースをノンブロッキング(クリティカルでない)ものとして識別し、必要なときだけこれらを読み込む戦略のことです。クリティカルレンダリングパスの長さを短縮する方法であり、ページのロード時間の短縮につながります。
初心者向けチュートリアル
MDN のウェブパフォーマンスの学習領域には、パフォーマンスの基礎をカバーする最新のチュートリアルが含まれています。パフォーマンスについての初心者は、ここから始めてください。
- ウェブパフォーマンス: 短い概要
-
ウェブパフォーマンスの学習経路の概要です。ここから旅を始めましょう。
- ウェブパフォーマンスとは
-
この記事では、パフォーマンスとは何かをよく理解することからモジュールを始めます。パフォーマンスについて考えるときに考慮すべきツール、指標、API、ネットワーク、人々のグループ、そしてウェブ開発のワークフローの一部としてパフォーマンスを活用する方法などを紹介します。
- ユーザーはパフォーマンスをどう知覚するのか
-
ウェブサイトの速さをミリ秒単位で示すことよりも重要なのは、ユーザーがサイトの速さをどのように認識しているかということです。これらの認識は、実際のページロード時間、アイドリング、ユーザーインタラクションへの応答性、スクロールやその他のアニメーションのスムーズさに影響されます。この記事では、様々なロードメトリクス、アニメーション、応答性のメトリクスと、実際の時間ではなくてもユーザーの認識を改善するためのベストプラクティスについて説明します。
- ウェブパフォーマンスの基本
-
HTML、CSS、JavaScript、メディアファイルなどのフロントエンド部品に加えて、アプリケーションを遅くする機能と、主観的・客観的にアプリケーションを速くする機能があります。ウェブパフォーマンスに関連する API、開発者ツール、ベストプラクティス、バッドプラクティスは数多くあります。ここでは、これらの機能の多くを基本的なレベルで紹介し、それぞれのトピックについて、パフォーマンスを向上させるためのより深い考察へのリンクを提供します。
- HTML のパフォーマンス特性
-
マークアップの属性やソースの順序によっては、ウェブサイトのパフォーマンスに影響を与えることがあります。 DOM ノードの数を最小限に抑え、スタイル、スクリプト、メディア、サードパーティのスクリプトなどのコンテンツを含むために、最適な順序と属性を使用することで、ユーザーエクスペリエンスを劇的に向上させることができます。この記事では、最大限のパフォーマンスを確保するために HTML をどのように使用すればよいかを詳しく見ていきます。
- マルチメディア: 画像と動画
-
ウェブパフォーマンスの中で最も身近な位置にあるのは、メディアの最適化です。各ユーザーエージェントの能力、サイズ、ピクセル密度に応じて、異なるメディアファイルを提供することが可能です。また、バックグラウンドのビデオからオーディオトラックを削除するなどのヒントを加えると、さらにパフォーマンスが向上します。この記事では、動画、音声、画像のコンテンツがパフォーマンスに与える影響と、その影響をできるだけ小さくするための方法について説明します。
- CSS パフォーマンス特性
-
CSS は、パフォーマンス向上のための最適化の焦点としてはあまり重要ではないかもしれませんが、パフォーマンスに影響を与える CSS の機能はいくつかあります。この記事では、パフォーマンスに影響を与えるいくつかの CSS プロパティと、パフォーマンスに悪影響を与えないためのスタイルの処理方法を提案します。
- JavaScript パフォーマンスのベストプラクティス
-
JavaScript は、適切に使用すればインタラクティブで没入感のあるウェブ体験を実現できますが、ダウンロード時間、レンダリング時間、アプリ内のパフォーマンス、バッテリー寿命、ユーザーエクスペリエンスを大きく損なう可能性があります。この記事では、複雑なコンテンツであっても可能な限りパフォーマンスを向上させるために考慮すべき JavaScript のベストプラクティスを紹介します。
パフォーマンス API の使用
- リソースタイミング API
-
リソースの読み込みとそのタイミングです。リソースバッファの管理や CORS への対応なども含みます。
- ユーザータイミング API
-
アプリケーション固有のタイムスタンプを生成するために、ユーザータイミング API の "mark" および "measure" の種類の項目を使用します。これらはブラウザーのパフォーマンスタイムラインの一部です。
- ビーコン API
-
Beacon インターフェイスは、ウェブサーバーへの非同期かつブロックされないリクエストをスケジューリングします。
- 交差オブザーバー API
-
交差オブザーバー API を使って要素が見えるようになることを時間的に測定し、関心のある要素が可視化されたときに非同期に通知を受けることができます。
その他の文書
- Firefox プロファイラーのパフォーマンス機能
-
このウェブサイトでは、コールツリー、フレイムグラフ、スタックチャート、マーカーチャート、ネットワークチャートなど、開発者ツールのパフォーマンス機能を使用し、理解する方法に関する情報を提供しています。
- 組み込みプロファイラーによるプロファイル
-
Firefox 組み込みのプロファイラーを使用して、アプリのパフォーマンスをプロファイリングする方法を紹介します。
用語集の用語
- ビーコン
- Brotli 圧縮
- クライアントヒント
- コード分割
- CSSOM
- ドメインシャーディング
- 有効接続種別
- First contentful paint
- First CPU idle
- First input delay
- First meaningful paint
- First paint
- HTTP
- HTTP/2
- Jank
- レイテンシー
- 遅延読み込み
- Long task
- 可逆圧縮
- 非可逆圧縮
- メインスレッド
- Minification
- ネットワークスロットリング
- パケット
- ページ読み込み時間
- Page prediction
- 構文解析
- 知覚的パフォーマンス
- 先読み
- Prerender
- QUIC
- RAIL
- Real User Monitoring
- Resource Timing
- Round Trip Time (RTT)
- Server Timing
- 投機的解析
- スピードインデックス
- SSL
- 合成モニタリング
- TCP ハンドシェイク
- TCP slow start
- 最初のバイトまでの時間
- 対話までの時間
- TLS
- Transmission Control Protocol (TCP)
- Tree shaking
- ウェブパフォーマンス
関連情報
HTML
CSS
- will-change
- GPU v CPU
- レイアウトの測定
- フォント読み込みのベストプラクティス
JavaScript
API
-
リソースのヒント - dns-prefetch, preconnect, prefetch, prerender
ヘッダー
- Content-encoding
- HTTP/2
- gZip
- クライアントヒント
ツール
その他の指標
- スピードインデックスと知覚的スピードインデックス
ベストプラクティス
-
コンテンツ配信ネットワーク (CDN)