NetworkInformation.downlinkを利用して、インターネット回線速度を示すメガビット毎秒単位の数値を取得できます。
navigator.connection.downlink; // 8.85Webビーコンのような少量データの通信では、回線速度の速さよりも応答遅延の短さが重要です。NetworkInformation.rttにより応答遅延をミリ秒単位で取得できます。
navigator.connection.rtt; // 50でもこれらの値からは、速いのか遅いのかが伝わりづらいです。そこで、回線速度の程度を文字列で表したNetworkInformation.effectiveTypeを使ってみましょう。
navigator.connection.effectiveType; // "4g"effectiveTypeのしきい値
| downlink | rtt | effectiveType | 説明 |
|---|---|---|---|
| 条件: 回線速度[Mbps] | 条件: 応答遅延[ms] | 出力: 種類(推測) | |
| 0.05以下 | 2000以上 | slow-2g | テキストデータの転送にしか向かない |
| 0.07以下 | 1400以上 | 2g | アイコンファイルの転送にも耐えうる |
| 0.7以下 | 270以上 | 3g | 中〜大サイズの画像や音声、低解像度動画の転送にも耐えうる |
| 0.7超 | 0以上 | 4g | 高解像度動画の転送にも耐えうる |
downlinkプロパティ値が1.3(4gクラス)、rttプロパティ値が500(3gクラス)の場合、低速な方が優先されて3gが出力されました。
データ元はNetwork Information APIの仕様書ですが、そのデータは稀に更新されます。2017年6月6日から26日の間に現在のデータになりましたが、それ以前は以下の通りでした。
| downlink | rtt | effectiveType |
|---|---|---|
| 条件: 回線速度[Mbps] | 条件: 応答遅延[ms] | 出力: 種類(推測) |
| 0.05以下 | 1900以上 | slow-2g |
| 0.07以下 | 1300以上 | 2g |
| 0.7以下 | 200以上 | 3g |
| 0.7超 | 0以上 | 4g |
参考リンク