From 3d75e6df626f741a616c3dcebe4366600ffd2ea0 Mon Sep 17 00:00:00 2001 From: Masahiro FUJIMOTO Date: Thu, 13 May 2021 01:12:28 +0900 Subject: Learn/HTML/Howto/Author_fast-loading_HTML_pages を更新 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 2021/04/24 時点の英語版に同期 - 原語併記マクロを削除 --- .../author_fast-loading_html_pages/index.html | 117 ++++++++++----------- 1 file changed, 55 insertions(+), 62 deletions(-) (limited to 'files/ja/learn') diff --git a/files/ja/learn/html/howto/author_fast-loading_html_pages/index.html b/files/ja/learn/html/howto/author_fast-loading_html_pages/index.html index 3badead64e..ed790bee4d 100644 --- a/files/ja/learn/html/howto/author_fast-loading_html_pages/index.html +++ b/files/ja/learn/html/howto/author_fast-loading_html_pages/index.html @@ -1,6 +1,6 @@ --- -title: 読み込みが速い HTML ページを作成するための Tips -slug: conflicting/Learn/HTML/Howto/Author_fast-loading_HTML_pages +title: 読み込みが速い HTML ページを作成するための豆知識 +slug: Learn/HTML/Howto/Author_fast-loading_HTML_pages tags: - Advanced - Guide @@ -18,25 +18,25 @@ original_slug: Web/Guide/HTML/Tips_for_authoring_fast-loading_HTML_pages

ページの読み込みパフォーマンスの最適化は、低速なダイヤルアップ接続やモバイルデバイスの利用者向けコンテンツのためだけではありません。ブロードバンド向けコンテンツでも重要であり、高速接続の利用者であっても劇的な改善につながるでしょう。

-

豆知識

+

豆知識

-

ページの量の削減

+

ページの量の削減

ページの量は、ページ読み込みパフォーマンスにおいて断然重要な要素です。

最小化として知られる不要なホワイトスペースやコメントの削除、インラインのスクリプトや CSS の外部ファイルへの移動によりページの量を削減することで、ページの構造変更を最小限にしてダウンロードの性能を向上できるでしょう。

-

HTML Tidy のようなツールを利用すると、妥当な HTML ソースから行頭のホワイトスペースや過剰な空行を自動的に取り除くことができます。他に JavaScript ソースを、書式変更や難読化および長い識別子を短いものに置き換えることで 「{{原語併記("圧縮", "compress")}}」するツールもあります。

+

HTML Tidy のようなツールを利用すると、妥当な HTML ソースから行頭のホワイトスペースや過剰な空行を自動的に取り除くことができます。他に JavaScript ソースを、書式変更や難読化および長い識別子を短いものに置き換えることで 「圧縮」するツールもあります。

-

ファイル数の最少化

+

ファイル数の最少化

-

ウェブページが参照するファイル数を削減することで、ページのダウンロードに必要な HTTP コネクションの数が減り、それによってリクエストを送信したり、レスポンスを受け取ったりする時間が短縮できます。

+

ウェブページが参照するファイル数を削減することで、ページのダウンロードに必要な HTTP コネクションの数が減り、それによってリクエストを送信したり、レスポンスを受け取ったりする時間が短縮できます。

ブラウザーのキャッシュ設定によっては、ブラウザーが各ファイルの If-Modified-Since ヘッダーで、ファイルが最後にダウンロードされてから変更されているかどうかを確認するリクエストを送信することがあります。ページをレンダリングする前に、ブラウザがこれらの各ファイルの変更時刻をチェックする必要があるため、参照されたファイルの最終変更時刻をチェックするのに時間がかかり過ぎると、ウェブページの初期表示が遅くなることがあります。

CSS で多数の背景画像を使用している場合は、画像スプライトと呼ばれる方法でで画像を 1 つに結合することで必要な HTTP による参照の数を減らすことができます。すなわち、背景として用いる画像ファイルは毎回同じものを適用し、それを適切な x/y 座標に調整します。これは寸法が限られている要素について最善の方法ですが、適用できない場合もあるでしょう。しかし、HTTP リクエストを少なくしてキャッシュする画像を単一にすることで、ページの読み込み時間を削減できます。

-

コンテンツ配信ネットワーク (CDN) を使用する

+

コンテンツ配信ネットワーク (CDN) を使用する

この記事の目的のために、CDN はサーバーと訪問者の間の物理的な距離を縮めるための手段です。サーバーの起点と訪問者の間の距離が長くなると、読み込み時間が長くなります。ウェブサイトのサーバーがアメリカにあり、インドからの訪問者がいるとします。米国からの訪問者と比較して、ページの読み込み時間はインドの訪問者の方がはるかに長くなります。

@@ -48,13 +48,13 @@ original_slug: Web/Guide/HTML/Tips_for_authoring_fast-loading_HTML_pages
  • Understanding CDNs
  • -

    ドメイン検索の削減

    +

    ドメイン検索の削減

    ドメインが分かれていると DNS の参照に時間がかかるため、CSS の link や JavaScript や画像の src に多数のドメインが現れるほど、ページの読み込み時間が長くなるでしょう。

    現実的でない場合があるかもしれませんが、ページがあるドメインと異なるドメインの使用数は必要最低限にするよう注意すべきです。

    -

    再利用されるコンテンツのキャッシュ

    +

    再利用されるコンテンツのキャッシュ

    どんなコンテンツでも、キャッシュできるか、キャッシュされているか、キャッシュ期限が適切であるかを確認してください。

    @@ -65,21 +65,21 @@ original_slug: Web/Guide/HTML/Tips_for_authoring_fast-loading_HTML_pages

    詳細情報:

      -
    1. HTTP Conditional Get for RSS Hackers
    2. -
    3. HTTP 304: Not Modified
    4. -
    5. Wikipedia の HTTP ETag の記事
    6. -
    7. Caching in HTTP
    8. +
    9. HTTP Conditional Get for RSS Hackers
    10. +
    11. HTTP 304: Not Modified
    12. +
    13. Wikipedia の HTTP ETag の記事
    14. +
    15. Caching in HTTP
    -

    ページのコンポーネントの最適な順序

    +

    ページのコンポーネントの最適な順序

    最初の表示に必要な CSS または JavaScript と共に、ページコンテンツをまずダウンロードすると、ページの読み込み中にユーザーに最もすばやくページを表示させることができます。このコンテンツは通常テキストであるため、転送中のテキスト圧縮の効率が良く、ユーザーへの反応がもっと早くなります。

    使用される前にページの読み込みが完了する必要がある動的機能は、最初は無効にしておき、ページの読み込みが完了した後でのみ有効にするようにしましょう。これにより、JavaScript がページコンテンツの後に読み込まれるようになり、ページ読み込み時に全体が表示されるまでの時間が短縮されます。

    -

    インラインスクリプト数の削減

    +

    インラインスクリプト数の削減

    -

    インラインスクリプトがあると、インラインスクリプトのパース中にページの構造が変わる可能性があるとパーサーが想定しなければならないため、ページの読み込みにおいて重荷になることがあります。一般的にはインラインスクリプトの使用を減らし、また特に document.write() を用いたコンテンツの出力を減らすことで、ページ読み込みのパフォーマンスが向上するでしょう。 document.write() に基づく旧来のコンテンツ操作方法ではなく、最新のブラウザー向けの方法である AJAX を使用してください。

    +

    インラインスクリプトがあると、インラインスクリプトのパース中にページの構造が変わる可能性があるとパーサーが想定しなければならないため、ページの読み込みにおいて重荷になることがあります。一般的にはインラインスクリプトの使用を減らし、また特に document.write() を用いたコンテンツの出力を減らすことで、ページ読み込みのパフォーマンスが向上するでしょう。 document.write() に基づく旧来のコンテンツ操作方法ではなく、最新のブラウザー向けの方法である AJAX を使用してください。

    最新の CSS と正しいマークアップの使用

    @@ -87,11 +87,11 @@ original_slug: Web/Guide/HTML/Tips_for_authoring_fast-loading_HTML_pages

    正しいマークアップを使用することは、ほかにも利点があります。第一に、ブラウザーが HTML を解釈する際にエラー訂正を行う必要がなくなります (ユーザーの記述法の多様性を認めるかどうかという哲学的な問題とは別です。厳密な、許容範囲のない書式を強制するというより、プログラム的に「正しく」または正規化しましょう)

    -

    さらに、正しいマークアップをすることによって、ウェブページをプリプロセスができる他のツールが自由に利用できるようになります。例えば、HTML Tidy はホワイトスペースや省略可能な終了タグを除去することができます。しかし、重大なマークアップの誤りがあるページではツールを実行できません。

    +

    さらに、正しいマークアップをすることによって、ウェブページをプリプロセスができる他のツールが自由に利用できるようになります。例えば、HTML Tidy はホワイトスペースや省略可能な終了タグを除去することができます。しかし、重大なマークアップの誤りがあるページではツールを実行できません。

    -

    コンテンツをまとめる

    +

    コンテンツをまとめる

    -

    テーブルをレイアウトのために使うのは陳腐化した方法であり、もはや使うべきではありません。レイアウトを行うには、代わりに floatspositioningフレックスボックスグリッドを使用してください。

    +

    テーブルをレイアウトのために使うのは陳腐化した方法であり、もはや使うべきではありません。レイアウトを行うには、代わりに浮動要素位置指定フレックスボックスグリッドを使用してください。

    テーブルは現在でも妥当なマークアップと考えられていますが、表形式のデータを表示するために用いるべきです。ブラウザーがページを迅速に表示するためには、テーブルを入れ子にしないようにしてください。

    @@ -112,17 +112,17 @@ original_slug: Web/Guide/HTML/Tips_for_authoring_fast-loading_HTML_pages <table>...</table> -

    CSS Flexible Box LayoutCSS Grid Layout の仕様書も参照してください。

    +

    CSS Flexible Box LayoutCSS Grid Layout の仕様書も参照してください。

    -

    SVG の資産を最小化し圧縮する

    +

    SVG の資産を最小化し圧縮する

    多くの描画アプリケーションで作成された SVG は、不必要なメタデータを含んでいることが多く、削除することができます。サーバーで SVG 資産を gzip で圧縮するよう設定しましょう。

    -

    画像を縮小して圧縮する

    +

    画像を縮小して圧縮する

    画像が大きいと、ページの読み込みに時間がかかります。画像をページに追加する前に、圧縮することを検討してください。 Compress JpegTiny PNG、その他多くのツールがオンラインで利用可能です。photoshop などのオフラインツールも使用できます。

    -

    画像やテーブルのサイズ指定

    +

    画像やテーブルのサイズ指定

    ブラウザーが直ちに画像やテーブルの高さや幅を決めることができれば、ブラウザーはコンテンツの再配置を行うことなくウェブページを表示できます。これはページの表示を高速化するだけでなく、ページの読み込みが完了するまでにレイアウトが不安定に変化することを防ぎます。よって、可能な限り画像には heightwidth を指定するべきです。

    @@ -133,7 +133,17 @@ original_slug: Web/Guide/HTML/Tips_for_authoring_fast-loading_HTML_pages

    そして、 <col> 要素および <colgroup> 要素を用いて列の幅を指定しましょう。

    -

    ユーザーエージェント要件の賢い選択

    +

    画像の遅延読み込みを使用する

    + +

    既定では、画像は熱心に読み込まれます。つまり、 HTML で処理されると同時に画像が読み込まれ、表示されます。熱心に読み込まれた画像は、文書の {{domxref("Document.load_event", "load")}} イベントが送られる前に表示されます。画像の遅延読み込みに切り替えるとブラウザーは、{{Glossary("visual viewport", "視覚的ビューポート")}}の描画に必要になるまで、画像の読み込みを保留します。

    + +

    画像に遅延読み込みのマークを付けるには、 {{htmlattrxref("loading", "img")}} 属性に lazy という値を指定してください。この設定により、画像は必要なときにのみ読み込まれます。

    + +
    <img href="./images/footerlogo.jpg" loading="lazy">
    + +

    ただし、遅延読み込みされた画像は、 load イベントが発生した時点では利用できない場合があります。画像がロードされているかどうかは、論理プロパティの {{domxref("HTMLImageElement.complete", "complete")}} の値が true であるかどうかを確認することで判断できます。

    + +

    ユーザーエージェント要件の賢い選択

    ページデザインを最大限に改善するには、プロジェクトのユーザーエージェントの要件を合理的なものにしましょう。すべてのブラウザー、特に古いバージョンのブラウザーでコンテンツがピクセル単位で正確に見えるように要求しないでください。

    @@ -141,53 +151,36 @@ original_slug: Web/Guide/HTML/Tips_for_authoring_fast-loading_HTML_pages

    ただし、この記事に記載している秘訣の多くはあらゆるユーザーエージェントに適用できる汎用的なテクニックであり、かつブラウザーの対応要件にかかわらずどのようなウェブページにでも適用できます。

    -

    可能なら async や defer を使用する

    +

    可能なら async や defer を使用する

    -

    asyncdefer 属性の両方と互換性のある JavaScript を使用し、特に、複数の script タグがある場合、可能ならば async をいつでも使用してください。
    +

    asyncdefer 属性の両方と互換性のある JavaScript を使用し、特に、複数の script 要素がある場合、可能ならば async をいつでも使用してください。

    - これにより、ページで JavaScript が読み込み中である間はレンダリングを中断できます。さもなければ、ブラウザーはこれらの属性を持たない script タグの後にあるコンテンツをレンダリングしないでしょう。

    + これにより、ページで JavaScript が読み込み中である間はレンダリングを中断できます。さもなければ、ブラウザーはこれらの属性を持たない script 要素の後にあるコンテンツをレンダリングしないでしょう。

    注意: これらの属性が初回のページ読み込みに大きな効果があるとしても、属性は使用するべきですがすべてのブラウザーで動作するとは考えないようにしてください。よい JavaScript コードを作るためのガイドラインすべてに従っていれば、コードを変更する必要はありません。

    -

    ページ構造の例

    - -

    · HTML

    +

    ページ構造の例

    -
    -
    · HEAD
    -
    - -
    -
    -
    -
    · LINK ...
    - ページの外観に必要な CSS ファイルです。管理のために関連性のない CSS は別のファイルに分けるとともに、パフォーマンスのためにファイル数は最小限にしてください。
    -
    -
    -
    +

    · {{htmlelement('html')}}

    +
    · {{htmlelement('head')}}
    -
    · SCRIPT ...
    - ページの読み込み中に必要な機能の JavaScript ファイルです。ページの読み込み後にしか実行しない DHTML は含めないようにしてください。
    -
    管理のために関連性のない JavaScript は別のファイルに分けるとともに、パフォーマンスのためにファイル数は最小限にしてください。
    +
    · {{htmlelement('link')}} ...
    +
    ページの外観に必要な CSS ファイルです。管理しやすくするため、関連性のない CSS は別のファイルに分けるとともに、パフォーマンスのためにファイル数は最小限にしてください。
    +
    · {{htmlelement('script')}} ...
    +
    ページの読み込み中に必要な機能の JavaScript ファイルですが、ページの読み込み後にしか実行しない対話操作に関するものは含めないようにしてください。 + 管理のために関連性のない JavaScript は別のファイルに分けるとともに、パフォーマンスのためにファイル数は最小限にしてください。
    -
    - -
    -
    · BODY
    -
    · 小さな塊 (tables / divs) のページコンテンツは、ページ全体の読み込みを待つことなく表示することができます。
    -
    - -
    -
    +
    · {{htmlelement('body')}}
    +
    · ユーザーが閲覧可能なページコンテンツを小さな塊 ( {{htmlelement('header')}}/ {{htmlelement('main')}}/ {{htmlelement('table')}}) にまとめると、ページ全体のダウンロードを待たずに表示できるようにすることができる。
    -
    · SCRIPT ...
    - DHTML を実行するのに用いるスクリプトです。DHTML のスクリプトはたいてい、ページが完全に読み込まれて必要なオブジェクトがすべて初期化された後にのみ実行します。よって、ページのコンテンツより先に読み込む必要はありません。先に読み込むと、ページが最初に表示されるのが遅くなります。
    -
    管理のために関連性のない JavaScript は別のファイルに分けるとともに、パフォーマンスのためにファイル数は最小限にしてください。
    -
    ロールオーバー効果で用いる画像がある場合は、ページのコンテンツをダウンロードした後に画像の先読みをしておきましょう。
    +
    · {{htmlelement('script')}} ...
    +
    対話操作を実行するのに用いるスクリプトです。対話操作のスクリプトはたいてい、ページが完全に読み込まれて必要なオブジェクトがすべて初期化された後にのみ実行されます。よって、ページのコンテンツより先に読み込む必要はありません。先に読み込むと、ページが最初に表示されるのが遅くなります。
    + 管理のために関連性のない JavaScript は別のファイルに分けるとともに、パフォーマンスのためにファイル数は最小限にしてください。
    + ロールオーバー効果で用いる画像がある場合は、ページのコンテンツをダウンロードした後に画像の先読みをしておきましょう。
    @@ -195,8 +188,8 @@ original_slug: Web/Guide/HTML/Tips_for_authoring_fast-loading_HTML_pages -- cgit v1.2.3-54-g00ecf