遅延ロードとUX加速
1)目標と原則
遅延ロードは、重要なものをすぐに表示するための戦略であり、必要に応じて残りのものです。目的:- クリティカルパスを犠牲にしてTTI/LCPを削減します。
- 予測可能な寸法でレイアウト(Low CLS)を安定化します。
- バッテリーとトラフィックをモバイルに保存します。
- 「変換を上げる」(Raise Conversion)-ユーザーはアクションを早期に確認します。
原則:優先度→進捗率→予測可能性。最初に、重要なコンテンツ、次にプログレッシブコンテンツとポストロードの改善。
2)クリティカルレンダリングパス
重要なHTML:すぐに「倍以上」のマークアップを与えます。
重要なCSS:インライン≤ 10-15 KB;残りは'media=「print」'+swap/reloadです。
ブロッカーとしてのJS: 'defer'/'async'、チャンクパーティショニング、ルートに沿ったロードロジック。
フォント:'font-display:' swap 'optional'、 WOFF2 preload、 system fallback'および。
3)ネットワークリソースの優先順位付け
CDN/fonts/images (TCP+TLS)に事前接続します。
第3ドメインのDNSプリフェッチ。
クリティカルイメージ/フォント/スクリプトをプリロードします。
優先ヒント(ヒーローイメージの場合"、重要度="高い"低い""、フェッチプリオリティ="高い")。
HTTP/3/QUIC:より少ないレイテンシ;CDNエッジはユーザーに近いです。
キャッシュポリシー:バージョン管理されたアセットの'immutable';ETag/Last-Modifiedを修正しました。
4)プログレッシブレンダリングとダウンロード状態
スピナーの代わりにスケルトン/シマー:「ジャンプ」なしで視覚的な進歩。
固定サイズのプレースホルダ(カード、サムネイル)-ゼロCLS。
ストリーミング/チャンクされたHTML:すぐにフレームを放棄し、コンテンツを追加します。
Optimistic UI(注意):瞬時のアクションに続いて検証。
5)遅延負荷メディアコンテンツ
画像:'loading=」lazy」'、' decoding=」async」'、 AVIF/WebPフォーマット(JPEG/PNGフォールバック)。
レスポンシブ:'srcset'/'sizes'異なるDPR/widths;1 で十分な3 をロードしないでく 。
予測可能な高さ:'width/height'またはCSS 'aspect-ratio'。
ビデオ:'preload=「metadata」'、ポストロードポスター、ビューポート外の自動一時停止。
アイコン:sprite/inline SVG;不要なHTTPリクエストを避けます。
6)怠惰なコンポーネントとルート
コード分割:ルート/ウィジェットによる動的インポート。
アイランドコンポーネント/部分水分補給:インタラクティブな領域のみをアニメーション化します。
SSR/SSG+ISR:サーバー上でHTMLをレンダリングし、段階的に更新します。
Suspense/Defer(使用されるフレームワーク内):データとUIの分解。
7)巨大なリストとテーブル
windowing-表示領域+バッファのみをレンダリングします。
アンカーリロード:パックの再ロード時に位置を維持します。
バッチアップデート:スクロール時の再描画を最小限に抑えます。
予測可能なサイズの固定行の高さまたは'contain-intrinsic-size'。
8) CSSおよびブラウザアクセラレータ
'content-visibility: auto':ブラウザは見えない(最小限の計算)をスキップします。
'contain'/'will-change':スタイル/レイアウトの影響を制限します。
アニメーション:変換/不透明度のみ;レイアウト/ペンキ重い効果を避けて下さい。
影とぼかし-控えめに、特にリストに。
9)イベントおよびJS負荷管理
パッシブスクロール/tachaリスナー('{passive: true}')。
/scroll/handlersのサイズを変更するためにDebounce/slottle。
ビューポート外のウィジェットの遅延初期化(IntersectionObserver)。
重いコンピューティングをWeb Workerに移行する。
10)モバイルコンテキスト
ネットワーク:遅い3G/high RTT-怠惰なダウンロードはより積極的です。
バッテリーと熱:タイマーの頻度を制限し、背景アニメーションのFPSを減らします。
圧縮:テキストのためのBrotli、正しい'Accept-Encoding'。
Wi-Fi経由のプリフェッチは、確率の高いトランジション(クリック履歴)のみに適用されます。
11)可用性とSEO
スケルトン≠コンテンツ:スクリーンリーダーに干渉しません。フォーカスの論理的な順序。
キーテキストのServer HTML-JSの背後にあるすべてを非表示にしないでください。
Altテキストとヘッダーはリロードされるまで使用できます。
遅延コンテンツはキーボードからのルートをブロックしないでください。
12)指標とターゲット
LCP (hero-image/header): ≤ 2。5秒(モバイル)。
INP(入力応答):≤ 200ms。
CLS: ≤ 0,1。
TTFB: ≤ 500ミリ秒;TTI: ≤ 3s。
配線(最初のビュー)上のバイト:厳密な予算(例えば、≤ 200-300 KBクレタ島。リソース)。
Scroll-jank: <1% frames> 16。7 ms。
- 'lazy_enqueued'/'lazy_loaded' (id、 type、 size、 latency)、
- 'component_hydrated'(時間、重量JS)、
- 'virtualized_window_resize'、
- 'lcp_candidate_showed'、 'skeleton_time_visible'、
- エラー('img_error'、 'decode_timeout')
13)典型的な地帯のためのパターン
ホーム/ディレクトリ:SSR+スケルトンカード、怠惰な画像、プログレッシブフィルタ。
プロダクト/ゲームカード:英雄のイメージのpreload+high優先順位;ギャラリー-怠惰。レビュー-クリックで。
Long articles/wiki:目次、読み込みの進捗、メディア/コードブロックの遅延、コンテンツの遅延テーブル。
ライブテープ:ライン仮想化、自動スクロール一時停止、バッファ制限。
14) Antipatterns
進行状況のないフルスクリーンスピナー>1-2 s。
ローカルホルダーなしで遅延→レイアウトジャンプ(CLS)。
「すべてのJSを一度にダウンロード」まれなシナリオのために。
重いフォント/画像を重要な部分にインライン化します。
予測不可能なカードサイズ→ローミングコンテンツ。
遅延クリティカルロード(ロゴ、ヒーローテキスト)-LCPを壊します。
「戻る」後の位置リターンはありません。
15)実装チェックリスト(ステップバイステップ)
スプリント1-診断:LCP/INP/CLS/TTFBを測定します。リソースとクリティカルパスをマップします。
Sprint 2-批判/優先順位:Critical CSS/HTML、 'preconnect'/'preload'、 JSチャンクを削減します。
スプリント3-メディア:AVIF/WebP、 'srcset/sizes'、固定寸法、非ヒーローのための怠惰。
Sprint 4-リスト:仮想化、アンカーリロード、スケルトン/シマー。
スプリント5-アーキテクチャ:部分的な水和/島、SSR/SSG/ISR、ストリーミング。
Sprint 6-微調整:'content-visibility'、優先度ヒント、デバウンス、Web Workers。
スプリント7-A/Bおよびテレメトリー:スケルトンオプション、遅延レベル、予算を比較します。
スプリント8-リリース衛生:資産バージョン、キャッシュバスティング、ロールバック戦略。
16)用語集(短い)
遅延ロード-見えないコンテンツの遅延ロード。
LCP/INP/CLS/TTFB/TTI/TBTは主なUXレート指標です。
コードスプリッティング/ハイドレーション/Islands-UI粉砕と活性化技術。
「仮想化」(Virtualization)-表示されるリストボックスをレンダリングします。
Priority Hints/Preconnect/Preload-以前にロードするものについてのブラウザへの指示。
コンテンツの可視性-見えないコンテンツの計算をスキップします。
17)ボトムライン
Lazy-loadingは"put 'loading="lazy"ではなく"、done"である。"これはシステムです。クリティカルパス、適切なメディアフォーマット、島のインタラクティブ、仮想化、テレメトリーです。重要な瞬間、二次の微妙で安価な、レイアウトを予測可能にします。それからプロダクトはあらゆる装置およびネットワークで速く感じます。