Javascript 测试下载速度的异步ajax调用
我正在努力实现的目标:Javascript 测试下载速度的异步ajax调用,javascript,ajax,Javascript,Ajax,我正在努力实现的目标: Testing the speed of download of a binary file using javascript. 我浏览了这个链接: 并且想到了如何做到这一点。现在只需下载一次图像并进行计算即可得到结果。 接下来为了获得更好的结果,我尝试将重复的ajax调用发送到apache服务器,直到10秒。获取结果,计算速度并将结果保存在数组中。 最后计算所有速度的平均值,得出结果 问题是,如果我使用的是async:false,那么当使用async:true时,浏览
Testing the speed of download of a binary file using 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调用。提前感谢您的帮助。@dm03514:是的,我对它进行了多次测试,但设置async:true不会产生任何结果……相反,它会导致浏览器崩溃。如果您使用async true,则不会等待一次下载完成后再开始下一次下载。因此,您可能要执行数千个ajax调用。在10秒内,您可以多次调用$.ajax。这就是问题所在。最重要的是,大多数浏览器不允许您同时发出超过4-5个ajax请求。那么解决这个问题的方法是什么呢?您想做什么?同时进行多个下载,还是一个接一个?一个接一个。我试过了,但也没用。。我不知道如何处理ajax调用。