Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/421.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 测试下载速度的异步ajax调用_Javascript_Ajax - Fatal编程技术网

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调用。