ネットワーク品質に基づくアダプティブ サービング

ウェブサイトの読み込みは、ネットワークの状態によって大きく異なる場合があります。通常、高速なネットワークではすべてスムーズに動作しますが、モバイルデータ通信のプランが制限されている外出先で接続が不安定な場合や、コーヒーショップの遅い Wi-Fi でノートパソコンを使用している場合は、話は別です。

これに対処する 1 つの方法は、接続の品質に応じて、ユーザーに提供するアセットを調整することです。これは、Network Information API で可能になりました。これにより、ウェブ アプリケーションはユーザーのネットワークに関する情報にアクセスできるようになります。

対応ブラウザ

  • Chrome: 61。
  • Edge: 79.
  • Firefox: サポートされていません。
  • Safari: サポートされていません。

ソース

用途

このネットワーク情報を使用してユーザー エクスペリエンスを向上させる方法はいくつかあります。

  • ユーザーのネットワークに基づいて、高精細と低精細のコンテンツを切り替えます。
  • リソースをプリロードするかどうかを決定します。
  • ユーザーの接続速度が遅い場合は、アップロードとダウンロードを遅らせます。
  • ネットワークの品質がアプリの読み込みや機能の使用に十分でない場合は、オフライン モードを有効にします。
  • モバイル接続で何か(動画の視聴など)を行うと料金が発生する可能性があることをユーザーに警告します。
  • アナリティクスで使用して、ユーザーのネットワーク品質に関するデータを収集します。

多くのアプリケーションでは、すでに同様の処理が行われています。たとえば、YouTube、Netflix、その他のほとんどの動画(またはビデオ通話)サービスでは、ストリーミング中に解像度が自動的に調整されます。Gmail の読み込み中に、[基本的な HTML を読み込む(接続速度が遅い場合)] へのリンクが表示されます。

ユーザーの接続速度が遅い場合に Gmail の簡易 HTML 形式を読み込むためのリンク

仕組み

navigator.connection オブジェクトには、クライアントの接続に関する情報が含まれます。プロパティについては、下の表をご覧ください。

プロパティ 説明
downlink 帯域幅の見積もり(メガビット/秒)。
effectiveType 接続の有効なタイプ。有効な値は 'slow-2g''2g''3g''4g' です(4G 以上をカバー)。ラウンドトリップ時間とダウンリンク速度の組み合わせで決まります。たとえば、高速ダウンリンクと高いレイテンシを組み合わせると、レイテンシが原因で effectiveType が低下します。
onchange 接続情報が変更されたときに呼び出されるイベント ハンドラ。
rtt 接続の推定ラウンドトリップ レイテンシ(ミリ秒単位)。
saveData ユーザーがデータ使用量の削減モードをリクエストしたかどうかを定義するブール値。

ブラウザのコンソールで実行すると、次のようになります。

navigator.connection オブジェクトのプロパティの値が表示されている Chrome DevTools コンソール

effectiveType の値は Client Hints からも参照できます。この値を使用して、ブラウザの接続タイプをサーバーに伝えることができます。

onchange イベント リスナーを使用すると、ネットワーク品質の変化に動的に適応できます。ネットワーク状態が悪いためにアップロードまたはダウンロードを延期した場合は、イベント リスナーを使用して、ネットワーク状態が改善されたときに転送を再開できます。また、ネットワーク品質が変化したときにユーザーに通知することもできます。たとえば、Wi-Fi の電波が途切れてモバイル ネットワークに切り替わった場合、データの誤送信(と請求 💸)を防ぐことができます。

他のイベント リスナーと同様に onchange イベント リスナーを使用します。

navigator.connection.addEventListener('change', doSomethingOnChange);

まとめ

Network Information API の潜在的なメリットは大きく、特にネットワークが遅いユーザーや、帯域幅を大量に必要とするアプリケーションで効果を発揮します。何よりも、プログレッシブ エンハンスメントの手法として使用できます。