如果javascript是单线程的,如何测量多个ajax调用的时间

时间:2014-06-25 16:29:34

标签: javascript ajax

var startTime = new Date().getTime();
var ajaxResponseTime1;
var ajaxResponseTime2;

$.ajax({
    success: function(){
        ajaxResponseTime1= new Date().getTime() - startTime;
        //some task that takes 5 seconds
    }
});

$.ajax({
    success: function(){
        //possibly inaccurate since it includes the time it took to 
        //execute other success callback function
        ajaxResponseTime2= new Date().getTime() - startTime;  

        //some task that takes 5 seconds
    }
});

由于javascript是单线程的,这并不意味着首先调用哪个成功方法,执行该成功方法所花费的时间将被计入第二个成功回调函数被调用的时间?

我想知道每个ajax调用调用成功回调所花费的时间。和响应时间一样。

2 个答案:

答案 0 :(得分:1)

我正在重新编辑这个答案,因为我对你如何处理你的问题有了更多的了解。

术语 准确度 显然是相对的。在大多数现代处理器上,这两个ajax调用被称为相隔不到一毫秒。请考虑以下代码:

var start = new Date.getTime();

display();

function display(){ console.log(new Date().getTime() - start); };

结果输出可能为0.这是0毫秒。这告诉我们任意方法的执行时间是什么?

是JavaScript是单线程的。是的,它是同步的。所以 事实 是一个方法总是会在另一个方法之前调用,尽管它们同时进入。

但是,只要回调不会阻碍脚本执行,响应时间就会'漂亮'准确。正如我所说,这取决于你所谓的 'acurate'

另一个编辑!

该死的。我刚刚注意到你的//some task that takes 5 seconds评论可能指的是一个长期的同步任务?如果你说这个过程将同步执行5秒钟,那么是 - 准确性将是一个问题。

答案 1 :(得分:0)

var startTime = new Date().getTime();
var ajaxResponseTime1;
var ajaxResponseTime2;
var executeTime = 0; 

$.ajax({
    success: function(){
    ajaxResponseTime1= new Date().getTime() - startTime - executeTime;
    //some task that takes 5 seconds
    executeTime = new Date().getTime() - ajaxResponseTime1;
  }
});

$.ajax({
    success: function(){
    ajaxResponseTime2= new Date().getTime() - startTime - executeTime;  
    //some task that takes 5 seconds
    executeTime = new Date().getTime() - ajaxResponseTime2;
 } 
});

现在,在获得响应时间时,会考虑任何其他回调的执行时间。