【发布时间】:2020-05-06 05:31:38
【问题描述】:
如何获得一页上所有 api 调用的总响应时间?当我有单个 API 调用时,我创建了 interceptor,下面是 interceptor 的代码:
httpconfig.interceptor.ts:
import { Injectable } from '@angular/core';
import { HttpRequest, HttpHandler, HttpEvent, HttpInterceptor, HttpErrorResponse, HttpResponse } from '@angular/common/http';
import { Observable, throwError } from 'rxjs';
import { tap } from "rxjs/operators";
import { Router } from '@angular/router';
@Injectable()
export class TokenInterceptor implements HttpInterceptor {
constructor(private router: Router, private perfromancetesting: PerformancetestService) { }
intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
request = request.clone({
headers: request.headers.set('startTimestamp', startTimestamp.toString())
});
const startTime = Date.now();
return next.handle(request).pipe(tap((event: HttpEvent<any>) => {
if (event instanceof HttpResponse) {
if(event.status === 200) {
let elapsedTime = Date.now() - startTime;
this.perfromancetesting.setTime(startTime, Date.now(), elapsedTime, event.url);
const message = "Page load completed in " + elapsedTime + " ms";
this.logDetails(message);
}
}
}, (err: any) => {
if (err instanceof HttpErrorResponse) {
if (err.status === 401) {
// redirect to the login route
// or show a modal
}
}
}));
}
private logDetails(msg: string) {
console.log(msg);
}
}
performancetesting.service.ts:
import { Injectable } from '@angular/core';
import { Observable } from 'rxjs';
@Injectable({
providedIn: 'root'
})
export class PerformancetestService {
responseTimeArray = [];
constructor() { }
setTime(start, end, total, url) {
this.responseTimeArray.push({ starttime: start, endtime: end, totaltime: total, url: url });
}
getTime() {
return this.responseTimeArray;
}
}
home.component.ts:
constructor(private perfromancetesting: PerformancetestService) {
this.perfromancetesting.responseTimeArray = [];
}
ngAfterViewInit() {
let pageLoadTime = this.perfromancetesting.getTime();
console.log("Home: ", pageLoadTime);
}
在控制台中,我收到如下信息:
Home:[]
0: {starttime: 43243, endtime: 4545, totaltime: 5210, url: ''}
1: {starttime: 4152, endtime: 6396, totaltime: 7854, url: ''}
当我控制长度时,它是 0(零)。
问题:我可以在控制台中看到 API 调用的响应时间,但在某些页面上我有多个 API 调用,我如何才能一次对其进行控制台?
另外,我必须在前端显示响应时间。任何帮助将不胜感激。
【问题讨论】:
-
ngAfterInit 不保证 api 调用完成
标签: angular api httpresponse router response-time