我想要实现的目标:
Testing the speed of download of a binary file using javascript.
我浏览了这个链接: How to detect internet speed in Javascript?并了解了如何做到这一点。现在这涉及仅下载图像一次并进行计算以获得结果。 接下来为了获得更好的结果,我试图将重复的ajax调用发送到我的apache服务器直到10秒。获取结果,计算速度并将结果保存在数组中。 最后计算得出结果的所有速度的平均值。
问题是,如果我使用async:false,浏览器在使用async时变得无响应:true导致循环无限循环,而且我无法弄清楚应该如何进行调用。 这是我写的代码:
var startTime = 0;
var endTime = 0;
var file = '';
var allDownloadSpeeds=[];
var timeElapsed;
var t = new Date();
var x=t.getTime();
console.log(t.getHours() + " " + t.getMinutes() + " " + t.getSeconds());
t.setSeconds(t.getSeconds() + 10);
var y=t.getTime();
console.log(t.getHours() + " " + t.getMinutes() + " " + t.getSeconds());
var timeOfTest=y-x;
function DownloadTest() {
timeElapsed = 0;
var speed;
while(true){
startTime = new Date().getTime();
if(timeElapsed<timeOfTest){
$.ajax({
type: "GET",
url: "file.bin?id=" + startTime,
dataType: 'application/octet-stream',
async:false,
success: function(msg) {
binfile = msg;
endTime = new Date().getTime();
timeElapsed+=(end - startTime);
diff = (end - startTime) / 1000;
bytes = msg.length;
speed = (bytes / diff) / 1024 / 1024 * 8;
allDownloadSpeeds.push(speed);
},
});
}
else{
var averageSpeed=0;
for(var i=0;i<allDownloadSpeeds.length;i++){
averageSpeed+=allDownloadSpeeds[i];
}
console.log("Speed " + averageSpeed/averageSpeed.length);
break;
}
}
}
$(document).ready(function(){
TestDownload;
});
我不知道如何处理异步ajax调用。在此先感谢您的帮助。