如何计时ajax查询(发送查询,处理,接收响应)

时间:2011-11-14 19:55:19

标签: java javascript ajax

编辑以阐明我的意图:(基于初步答案)

我有一个网络应用程序。服务器由一组Java POJO组成,我使用Jersey将这些作为REST API公开。浏览器使用jquery ajax调用这些API,然后执行操作。

我想记录我的ajax查询所用的持续时间,我希望按

分解
  1. 将查询从浏览器发送到服务器(到我的Java POJO)需要多长时间
  2. Java POJO处理请求所需的时间
  3. 将响应传输到浏览器需要多长时间(从POJO出口点到onComplete:javascript中的入口点)
  4. 我也在寻找一种基于代码的解决方案,我可以在我的应用程序中系统地应用。

    所以,2本身是微不足道的,整个序列的计时是微不足道的。但是我不确定是否能获得1& 3.我最初将系统时间作为GET参数传递,并与服务器上的currentTimeMillis进行比较 - 但这取决于浏览器系统时间与服务器系统时间同步。不太可靠。

    还有其他建议吗?

5 个答案:

答案 0 :(得分:1)

使用Fiddler

答案 1 :(得分:1)

答案是你不能。当然不是来自使用Ajax的浏览器。

服务器可以将处理时间放在自定义响应头中,客户端知道发送/接收时间,从中可以很容易地得出往返时间并假设对称链路性能。 有效地超越它意味着您想要测量TCP性能。

答案 2 :(得分:1)

请参阅" How do you determine exactly when, accounting for network latency, a HTTP request was sent?",答案解释了如何"校准"服务器端时间的客户端时间。请注意,此校准 不准确 。希望这会有所帮助。

答案 3 :(得分:0)

如果这仅适用于几页和几个电话,我建议您使用Chrome开发工具中的网络标签。它提供了大量信息。

答案 4 :(得分:0)

这是你正在寻找的东西......

function myAjax(){

  var timer = {};
  timer["start"] = new Date().getTime();

  if(window.XMLHttpRequest){
    var req = new XMLHttpRequest();
  }
  else{
    var req = new ActiveXObject("Microsoft.XMLHTTP");
  }     

  req.onreadystatechange=function(){
    if(req.readyState===2){
      timer['recieved'] = new Date().getTime() - timer['start'];
    }
    if(req.readyState===3 && !timer['processing']){
      timer['processing'] = new Date().getTime();
    }
    if(req.readyState===4 && req.status===200){ 
      timer['processing'] = new Date().getTime() - timer['processing'];
      timer['full'] = new Date().getTime() - timer['start'];
      console.log(timer);
    }
  } 

  req.open("get", "myScript.php", true);
  req.send();
}

时间保存在计时器变量中。这显然不准确,甚至可能不是你想要的,但它是一些AJAX时代的简化版本。