データURIサイズ:インライン化vs外部ファイルの判断

データURIのサイズトレードオフを理解する。33%のBase64オーバーヘッド、損益分岐点の計算、外部ファイルがより良いパフォーマンスを発揮する場合を把握。

Performance

詳細な説明

データURIのサイズトレードオフ

データURIの中心的な問題は:HTTPリクエストの排除がBase64エンコーディングによる追加バイトよりも時間を節約するのはいつかということです。答えはファイルサイズ、ネットワーク状況、キャッシュ動作に依存します。

33%ルール

Base64エンコーディングは常にデータサイズを約33%増加させます。これはエンコーディングアルゴリズムに固有です:3バイトのバイナリが4文字のBase64出力を生成します。

損益分岐分析

HTTP/1.1接続の場合:

  • リクエストあたりの平均HTTPオーバーヘッド: 500-2000バイト
  • 損益分岐点: 4-6 KB未満のファイルがインライン化で恩恵を受ける

HTTP/2接続の場合:

  • マルチプレクシングによるリクエストあたりのオーバーヘッド削減
  • 損益分岐点が低くなる: 2-4 KB未満のファイルがインライン化で恩恵を受ける

サイズ閾値と推奨

元のサイズ アクション 理由
1 KB未満 常にインライン化 HTTPオーバーヘッドが支配的
1-4 KB 通常インライン化 ほとんどのネットワークでパフォーマンスゲイン
4-10 KB コンテキストを考慮 クリティカルレンダーパスのみインライン化
10-32 KB インライン化を避ける Base64オーバーヘッドが大きすぎる
32 KB超 インライン化しない キャッシュ付き外部ファイルを使用

圧縮への影響

Base64テキストは圧縮率が低く、gzipが効果的に圧縮できない高エントロピー出力を生成します。gzip圧縮されたドキュメントにおけるBase64データURIの実際のオーバーヘッドは、Base64文字列が周囲の構造化テキストよりもgzipアルゴリズムの効率が低いため、33%を超える可能性があります。

ユースケース

Webパフォーマンス監査を実施しており、サイトの50以上の画像アセットのうちどれをデータURIに変換し、どれをCDN付き外部ファイルとして提供すべきか決定する必要がある場合。

試してみる — Data URL Generator & Decoder

フルツールを開く