【问题标题】:How do I time an ajax query (send query, processing, receive response)如何计时 ajax 查询(发送查询、处理、接收响应)
【发布时间】:2011-11-14 19:55:18
【问题描述】:

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

我有一个网络应用程序。服务器由一组 Java POJO 组成,我正在使用 Jersey 将它们公开为 REST API。浏览器使用 jquery ajax 调用这些 API,然后做一些事情。

我想记录我的 ajax 查询所花费的持续时间,并且我想通过

进行细分
  1. 将查询从浏览器发送到服务器(到我的 Java POJO)需要多长时间
  2. Java POJO 处理请求需要多长时间
  3. 将响应传输到浏览器需要多长时间(从 POJO 出口点到 onComplete:javascript 中的入口点)

我还在寻找一种基于代码的解决方案,我可以在我的应用程序中系统地应用它。

因此,2 本身是微不足道的,而对整个序列的计时也是微不足道的。但是我不确定是否要获得 1 和 3 的故障。我最初打算将系统时间作为 GET 参数传递,并与服务器上的 currentTimeMillis 进行比较 - 但这取决于浏览器系统时间与服务器系统时间。不太可能是可靠的。

还有其他建议吗?

【问题讨论】:

  • 要回答这个问题,您确实需要全面了解网络流量、服务器处理(例如 IIS 负载分析 - 日志)以及客户端/服务器端代码中的一些计时器。我认为计时器实现起来很简单。其余的东西需要对服务器日志和网络工具进行复杂的分析。因此,这个问题应该被认为是非建设性的。就目前而言,它太模糊了。
  • 为什么要知道1和3?无论如何,这不是您可以做太多的事情。它应该在所有请求中都是相同的。您可以做些什么并监控的是请求和响应的大小。但这是另一个问题。
  • @Mikael - 这个应用程序将被移动设备和台式机使用。所以,我对网络时代很敏感。如果 3 在 2G/3G 网络上很大,那么我需要重新考虑客户端如何与服务器交互。
  • @Kevin 那么您需要使用一些不同大小的请求对其进行一次测试。并确定什么尺寸合适,什么尺寸不合适?
  • @Mikael 是的,了解可接受的尺寸是很有用的。在开发过程中不断测量实际尺寸也是非常有用的。因此希望不断衡量这一点。

标签: java javascript ajax


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    使用Fiddler。

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        【解决方案4】:

        如果这只是几个页面和几个电话,我建议使用 Chrome 开发工具中的网络选项卡。它提供了大量信息。

        【讨论】:

        • 这是我想在我的应用程序中系统地添加的东西,所以我正在寻找基于代码的解决方案。
        【解决方案5】:

        这是你要找的东西吗...

        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();
        }
        

        时间保存在 timer 变量中。这显然不准确,甚至可能不是您要寻找的,而是某些 AJAX 时代的简化版本。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2012-10-24
          • 2016-11-28
          • 2017-11-19
          • 1970-01-01
          • 2019-10-29
          • 1970-01-01
          • 1970-01-01
          • 2023-04-03
          相关资源
          最近更新 更多