【问题标题】:How to get response time in angular 4如何在角度 4 中获得响应时间
【发布时间】:2020-10-08 17:54:14
【问题描述】:

我想计算每个请求所花费的响应时间。目前我正在向服务发送 50 个请求,并且在发送所有请求后我得到响应。所以我无法计算每个响应所花费的时间,因为第一次调用后有 49 个请求。我使用的是 http 模块而不是 http 客户端模块。我觉得 chrome 开发人员工具给出了正确的响应时间,但我如何在 angular 4 中捕获它?

【问题讨论】:

  • 大部分性能统计数据都可以通过 Chrome 开发者工具中的 API 获得。您能告诉我们您希望如何访问 API 吗?您所服务网页的客户端代码无法访问该 API 和该信息。
  • 我已经在访问本地机器中的 API,并且正在从数据库中获取数据。我在 for 循环中对服务进行异步调用,并等待所有 50 个结果的到来。当结果可用时,我将绑定它们。由于它是异步调用,我无法弄清楚获得响应所需的时间。
  • 不,我的意思是访问 Chrome 开发者工具 API,尤其是资源计时的东西 chromedevtools.github.io/devtools-protocol/tot/Network/…
  • 我正在尝试从客户端访问它。即来自角度应用程序。 console.time() 和 console.timeEnd() ,这对我不起作用。
  • 没有。您无法从您所服务的网页中的任意客户端访问 Chrome 开发者工具。这就是我的问题开始的地方。您使用“google-chrome-devtools”标记了问题,如果您想从 Chrome 开发者工具中获取信息,则需要访问 Chrome 开发者工具。

标签: angular api http google-chrome-devtools


【解决方案1】:

这是一个简单的拦截器,它从角度显示每个请求的时间。您实际上可以修改它以将时间与响应一起包含...我不确定您想如何使用时间。

import { HttpInterceptor, HttpRequest, HttpHandler } from '@angular/common/http';
import { Injectable } from '@angular/core';

import { defer } from 'rxjs';
import { finalize } from 'rxjs/operators';

@Injectable()
export class PerformanceInterceptor implements HttpInterceptor {
  intercept(req: HttpRequest<any>, next: HttpHandler) {
    return defer(() => {
      const key = req.urlWithParams;
      console.time(key);
      return next.handle(req).pipe(finalize(() => {
        console.timeEnd(key);
      }));
    });
  }
}

【讨论】:

  • 这也是一样的。我也可以通过不使用拦截器来获取值,因为在发出 50 个请求后我得到了 http 响应。不过还是谢谢。
  • @AnkushRanapure 我不明白。这将显示请求和响应之间的时间,对于每个请求...(它们是否具有相同的 url?)您的问题是什么?
  • Andrei:你使用成功了吗?我同意它应该可以工作,但我发现这里测量的内容与网络选项卡或性能 API 测量的内容之间存在很大差异。例如。用拦截器测量的时间会说一些事情需要 200 毫秒,而网络选项卡说 20 毫秒。当然,网络选项卡的级别更低,但我们谈论的时间是 10 倍。 window.performance.getEntriesByType('resource').find(e =&gt; e.name === 'the-url') 还有另一个持续时间,在本例中为 100 毫秒 :)
  • @Christof 好吧,我想这取决于。可能是同时做其他事情的其他拦截器。可能还有响应的反序列化......
猜你喜欢
  • 2017-08-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-18
  • 1970-01-01
  • 1970-01-01
  • 2016-03-18
  • 2014-03-25
相关资源
最近更新 更多