异步ajax调用测试下载速度

时间:2015-04-23 13:55:37

标签: javascript ajax

我想要实现的目标:

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调用。在此先感谢您的帮助。

0 个答案:

没有答案