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

如果javascript是单线程的,如何测量多个ajax调用的时间,javascript,ajax,Javascript,Ajax,由于javascript是单线程的,这难道不意味着无论哪个成功方法首先被调用,执行该成功方法所花费的时间都将被计算为调用第二个成功回调函数所花费的时间吗 我想知道每次ajax调用调用成功回调所花的时间。与回复时间一样。我现在正在编辑此答案,因为我对您如何处理问题有了更多的了解 术语准确性显然是相对的。在大多数现代处理器上,这两个ajax调用的间隔不到一毫秒。考虑这个代码: var startTime = new Date().getTime(); var ajaxResponseTime1; v

由于javascript是单线程的,这难道不意味着无论哪个成功方法首先被调用,执行该成功方法所花费的时间都将被计算为调用第二个成功回调函数所花费的时间吗


我想知道每次ajax调用调用成功回调所花的时间。与回复时间一样。

我现在正在编辑此答案,因为我对您如何处理问题有了更多的了解

术语准确性显然是相对的。在大多数现代处理器上,这两个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
    }
});
结果输出可能为0。这是0毫秒。关于任意方法的执行时间,这告诉了我们什么

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

但是,只要回调不影响脚本的执行,响应时间就会非常准确。正如我所说,这取决于你所说的“准确度”

另一次编辑

该死。我刚刚注意到您的
//一些耗时5秒的任务
注释可能是指一个长同步任务?如果你说这个过程将同步执行5秒,那么是的,准确性将是一个问题

var start = new Date.getTime();

display();

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

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

这不取决于您正在获取的数据吗?您可以尝试使用延迟对象延迟代码的执行,直到记录了每个响应时间。如果您这样做是为了调试,请使用chrome/firefox/IE中的开发人员工具(我相信opera和safari也有)看看网络tab@c--misura,是的,确实如此……这正是我想要准确得到的。我会做@MBottens建议的事情——使用2个延迟对象,然后当它们都解析时,或者一个或另一个解析“JavaScript仍然同步执行”时,您可以执行一些操作因此,在callback1执行时,ajax2返回并调用callback2。但是callback2无法执行,因为JS是单线程的,正在等待callback1完成。callback2终于有机会执行了,但已经过了5秒……因此计时时间缩短了5秒。@Alex否,调用每个
成功
方法的时间是(适用于大多数处理器)小于一毫秒。初始的
$.ajax
调用之间的间隔小于一毫秒。
success
回调就是:一旦
$.ajax
完成就调用的方法。success方法是回调,在ajax调用成功完成之前不会调用。你不能说它们是以毫秒为单位执行的除此之外,这取决于返回响应所用的时间。@Alex是的,对不起,我的措辞很糟糕。我要说的是,调用方法时,方法本身在几毫秒内执行。我不是说它们将在几毫秒后被调用-正如你所说,这将取决于ajax r的响应时间equest。是的,我试图准确地获得响应时间。那么,我是否正确地认为第一次成功回调的执行时间会被计算到第二次回调中,因此不准确?好的,我误读了您的
//一些需要5秒的任务
。我以为您指的是ajax调用的响应时间:-(.所以你的意思是,你要运行一个同步脚本,它需要5秒钟才能执行?
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;
 } 
});