HTTP使用拦截器测量每个请求的时间

HTTP measure time of each request using interceptor

本文关键字:请求 时间 测量 HTTP      更新时间:2024-06-19

我正在尝试测量应用程序中http请求的时间。因为我认为这应该在全球范围内完成,所以我想使用拦截器。

我创建了一个可以记录每个请求的开始时间和结束时间的

app.factory('httpTimeInterceptor', [function() {
var start;
return {
  request: function(config) {
    start = new Date();
    console.log("START",start);
    return config;
  },
  response: function(response) {
    console.log("START",start);
    var date = new Date();
    console.log("END",date);
    return response;
  }
};
}])

这将三个值记录到控制台:我的请求的开始时间,然后再次记录开始时间和结束时间(当请求结束时)
当我处理多个请求时,我的问题就开始了(第二个请求在第一个请求结束之前开始)。在这种情况下,我的start变量将被新值覆盖。

问题是我的拦截器是工厂的,所以它是单例的(如果我错了,请纠正我)。

我可以修改我的代码以方便地获得每个请求所花费的实际时间吗
我想创建一个数组,为每个请求保存密钥,当它结束时,我可以从该数组(字典)中获得开始时间,但我不知道如何在requestresponse函数中识别相同的请求。

也许有一个更简单的解决方案来解决我想要做的事情?

您可以存储传递给request函数的config对象的开始时间。此对象在response拦截器中可用作response.config。请确保选择Angular尚未使用的唯一特性名称。