NetworkInformation.downlinkを利用して、インターネット回線速度を示すメガビット毎秒単位の数値を取得できます。

navigator.connection.downlink; // 8.85

Webビーコンのような少量データの通信では、回線速度の速さよりも応答遅延の短さが重要です。NetworkInformation.rttにより応答遅延をミリ秒単位で取得できます。

navigator.connection.rtt; // 50

でもこれらの値からは、速いのか遅いのかが伝わりづらいです。そこで、回線速度の程度を文字列で表したNetworkInformation.effectiveTypeを使ってみましょう。

navigator.connection.effectiveType; // "4g"

effectiveTypeのしきい値

downlinkrtteffectiveType説明
条件: 回線速度[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日の間に現在のデータになりましたが、それ以前は以下の通りでした。

downlinkrtteffectiveType
条件: 回線速度[Mbps]条件: 応答遅延[ms]出力: 種類(推測)
0.05以下1900以上slow-2g
0.07以下1300以上2g
0.7以下200以上3g
0.7超0以上4g

参考リンク