基本的には、次のようにします。
- タイマーを開始する
- 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 の例を次に示します。