10

これに答えない多くの質問を見てきました。Java スクリプトを使用して誰かの帯域幅を確認し、それに基づいて特定のコンテンツをロードすることは可能ですか?

BBC は、携帯電話を使用しているときや人里離れた場所で低品質の画像を提供しているようです。

これを見ると、このクールなサービスはこれとその CDN を実行するため、サーバー側である可能性があります。

http://www.resrc.it/docs/

誰も彼らがそれを行う方法を知っていますか? または、asp.netやjavascript、またはコミュニティのオープンソースプラグインを使用してそれを行う方法.

https://github.com/yahoo/boomerang/で可能かもしれないと思いますが、これが本当の目的かどうかはわかりません。

4

6 に答える 6

8

基本的には、次のようにします。

  • タイマーを開始する
  • ajax 呼び出しを介して画像などの固定サイズのファイルをロードする
  • タイマーを止める
  • いくつかのサンプルを取り、平均の悪い幅を計算します

このようなものはうまくいくかもしれません:

//http://upload.wikimedia.org/wikipedia/commons/5/51/Google.png
//Size = 238 KB
function measureBW(cnt, cb) {
    var start = new Date().getTime();
    var bandwidth;
    var i = 0;
    (function rec() {
        var xmlHttp = new XMLHttpRequest();
        xmlHttp.open('GET', 'http://upload.wikimedia.org/wikipedia/commons/5/51/Google.png', true);

        xmlHttp.onreadystatechange = function () {
            if (xmlHttp.readyState == 4) {
                var x = new Date().getTime() - start;
                bw = Number(((238 / (x / 1000))));
                bandwidth = ((bandwidth || bw) + bw) / 2;
                i++;
              if (i < cnt) {
                start = new Date().getTime();rec();
              }
                else cb(bandwidth.toFixed(0));
            }
        };
        xmlHttp.send(null);
    })();

}

measureBW(10, function (e) {
    console.log(e);
});

すべてのブラウザーで機能するとは限りませんvar xmlHttp = new XMLHttpRequest();。UserAgent を確認し、正しいものを使用する必要があります。

そしてもちろん、それは単なる推定値です。

JSBin の例を次に示します。

于 2012-12-21T10:47:34.117 に答える
2

画像のダウンロードのタイミングに基づいてこれをノックアウトしました(参照: http://www.ehow.com/how_5804819_detect-connection-speed-javascript.html

ただし、警告の言葉

私の速度は1.81Mbpsと表示されていますが、

しかし、SpeedTest.Net によると、私の速度は次のとおりです。

ここに画像の説明を入力

ダウンロードのタイミングのロジックは正しいようですが、正確かどうかはわかりませんか?

于 2012-12-21T10:51:31.580 に答える
2
  1. タイマーを開始します。
  2. AJAX リクエストをサーバーに送信し、既知のサイズのファイルをリクエストします。
  3. AJAX リクエストの読み込みが完了したら、タイマーを停止し、経過時間とファイル サイズから帯域幅を計算します。

JavaScript の問題は、ユーザーが無効にできることです。(これは携帯電話でより一般的ですが、たまたま小さい画像の方が適しています)

于 2012-12-21T10:13:04.000 に答える
1

コメントで述べたように、2 つのアプローチを選択できます。

1)モバイルアプリのコンテキストにいる場合、デバイスで使用されているテクノロジーを直接クエリできるため、レンダリングできるコンテンツのタイプ(およびサイズ)をサーバーに直接通知できます。フォン ギャップは、JavaScript を使用してネイティブ モバイル API の一部にアクセスするのに役立つと思います。

2)サーバータイマーのこと。いくつかのファイルを自分で「提供」できます。たとえば、ランディング ページにマジック ファイルがあり、クライアントがファイルをリクエストするとすぐに、カスタム ハンドラでこの HTTP リクエストを取得します。出力ストリームに書き込むことでファイルを「手動で」提供し、送信されたバイト数と EOF に到達するまでにかかった時間を測定すると、何らかの方法で帯域幅を測定できます。これをセッション Cookie と組み合わせると、接続されたブラウザーごとにこの情報が得られます。

于 2012-12-21T11:11:35.363 に答える
0

Web ベース環境の帯域幅を検出するためのオープンソース JavaScript API であるBwChをリリースしました

ES2015でビルドされています。モバイル デバイスとデスクトップ デバイスの両方の帯域幅を検出する柔軟な方法を提供するために、最新の JavaScript イノベーション (window.navigator.connection は 2016 年 4 月時点で Android 用 Chrome 48 以降で現在サポートされています) を使用しています。最新の API が利用できない帯域幅を検出するために、画像のプリロードをフォールバック/補完します。

于 2016-04-07T11:04:26.523 に答える