如何在浏览器中确定和记录远程服务器的延迟

时间:2014-08-19 19:35:19

标签: javascript analytics http-status-codes data-collection

相关 How to determine latency of a remote server through the browser

我试图了解收集外部服务器http响应状态代码的可行性。

上下文: 我正在加载一个javascript库到页面,该页面被写入以捕获DOM元素值,然后将GET请求组装到外部服务器以传递这些值以进行收集。谷歌分析就是一个很好的例子,ga.js库对页面/浏览器中的数据值进行范围调整,并向外部服务器上的跟踪像素发出带有大量查询字符串名称/值对和/或cookie值的图像请求。这是一种常见的活动,通常被理解。

我想要记录的是外部收集服务器的响应/确认(为了减少处理和/或数据收集开销,这可能仅限于响应不是200的情况)。 我的理解是响应代码仅在HTTP标头中可用。我甚至不知道是否有可能以这种方式捕获标题响应。我不清楚如何捕获或以其他方式记录这些响应代码并使它们在浏览器中可用,以便后续的收集例程,可能一个javascript库,可以与出站服务器域一起收集这些代码(即HOST:google-analytics.com状态:413请求实体太大),并将这些收集的值发送到外部收集环境。

作为一个额外的"很高兴有#34;定时收集时间也是有益的,但我发现这是一个明显不同的问题。在发出请求时启动计时器,在请求被确认并返回到浏览器的状态代码时停止计时器,使用数据发送该数字:(主机:google-analytics.com状态:413请求实体太大时间:283ms )。

1 个答案:

答案 0 :(得分:0)

如果您使用ajax向远程服务器发出请求以及远程服务器的响应,则可以从XmlHTTPRequest对象获取状态代码。请求完成后,status属性会为您提供http状态代码。

您可以使用类似jquery的内容来简化操作。

警告:此示例代码未经测试

 var startTime = new Date().value;

 $.get('http://example.com/some/path', { param1:'value1', param2:'value2'})
    .done(function(data, status, jqxhr) {
      var endTime = new Date().value;
      var elapsedMS = endTime - startTime;
      // handle your success things here
    })
    .error(function(jqXHR, textStatus, errorThrown ) {
      var endTime = new Date().value;
      var elapsedMS = endTime - startTime;
      // handle your failure here
      if (typeof console != 'undefined') {
        console.log('your url', jqXHR.status, textStatus, errorThrown);
      }
    })
    ;

注意:某些跨域ajax请求被阻止。远程服务器必须明确设置响应头以允许这些类型的请求。