インターネットから3つの画像ファイルをダウンロードし、それらの読み込みにかかった時間を平均して、スピードテストを実装しようとしています。なんらかの理由でエラーが発生した場合は、その画像の読み込みをスキップして次の画像に進みます。最後の画像でエラーが発生した場合は、その時点での平均速度を計算して、発信者に戻ります。
現在、エラーが発生すると(画像のURLを意図的に変更して存在しないようにしました)、それ以上進むことはありません。.onerror関数からtrueを返そうとしましたが、うまくいきませんでした。助言がありますか?
var images = [{
"url": 'http://<removed>250k.jpg?n=' + Math.random(),
"size": 256000
}, {
"url": 'http://<removed>500k.jpg?n=' + Math.random(),
"size": 512000
}, {
"url": '<removed>1000k.jpg?n=' + Math.random(),
"size": 1024000
}
];
function calculateBandwidth() {
var results = [];
for (var i = 0; i < images.length; i++) {
var startTime, endTime;
var downloadSize = images[i].size;
var download = new Image();
download.onload = function () {
endTime = (new Date()).getTime();
var duration = (endTime - startTime) / 1000;
var bitsLoaded = downloadSize * 8;
var speedBps = (bitsLoaded / duration).toFixed(2);
var speedKbps = (speedBps / 1024).toFixed(2);
var speedMbps = (speedKbps / 1024).toFixed(2);
results.push(speedMbps);
//Calculate the average speed
if (results.length == 3) {
var avg = (parseFloat(results[0]) + parseFloat(results[1]) + parseFloat(results[2])).toFixed(2);
return avg;
}
}
download.onerror = function (e) {
console.log("Failed to load image!");
return true;
};
startTime = (new Date()).getTime();
download.src = images[i].url;
}
}