RxJS interval() 在 MS Edge 中变化很大
RxJS interval() varies wildly in MS Edge
我有一个 Angular 6 应用程序,它每 10 秒执行一次 API 调用以更新报价。 API 调用的时间是使用 RxJS interval() 管理的。
出于某种原因,在 MS Edge 上,时间变化很大,从几秒到几分钟不等。任何想法可能是什么原因?
代码如下:
const refreshPriceInterval = interval(10000);
let startTime = new Date(), endTime: Date;
refreshPriceInterval.pipe(
startWith(0),
flatMap(() => {
endTime = new Date();
let timeDiff = endTime.getTime() - startTime.getTime(); //in ms
// strip the ms
timeDiff /= 1000;
console.log(timeDiff);
startTime = new Date();
return this.timeseriesService.getQuote(symbol, this.userInfo.apiLanguage);
})
)
控制台输出如下:
0.001
18.143
4.111
11.057
13.633
12.895
3.003
12.394
7.336
31.616
20.221
10.461
有没有办法提高准确率?
编辑:
性能会随着时间的推移而下降。
将 interval() 中的代码减少到只有一个 console.log 并没有表现得更好。
可能是 Angular 问题。
由浏览器决定为每个浏览器选项卡分配多少 CPU 个循环。根据资源(例如;电池)或 activity(背景选项卡与前景选项卡),您的浏览器页面将收到或多或少的 cpu 切片。
一些背景:https://github.com/WICG/interventions/issues/5
This is shipped in Edge as well now (as of EdgeHTML14). The clamping to 1Hz in background tabs, not anything more intensive.
除此之外;您也在测量通话的延迟时间:
timeseriesService.getQuote()
所以也可能是这个调用需要一些时间。
这确实是一个 Angular 问题。定时进程导致 Angular 不断重新呈现应用程序,这可能会占用大量资源。
我用runOutsideAngular()来规避这个问题。事实证明,我只需要 运行 Angular 之外的一个函数:
this.ngZone.runOutsideAngular(() => {
this.handleMouseEvents();
});
感谢 Mark van Straten 的意见!
我有一个 Angular 6 应用程序,它每 10 秒执行一次 API 调用以更新报价。 API 调用的时间是使用 RxJS interval() 管理的。
出于某种原因,在 MS Edge 上,时间变化很大,从几秒到几分钟不等。任何想法可能是什么原因?
代码如下:
const refreshPriceInterval = interval(10000);
let startTime = new Date(), endTime: Date;
refreshPriceInterval.pipe(
startWith(0),
flatMap(() => {
endTime = new Date();
let timeDiff = endTime.getTime() - startTime.getTime(); //in ms
// strip the ms
timeDiff /= 1000;
console.log(timeDiff);
startTime = new Date();
return this.timeseriesService.getQuote(symbol, this.userInfo.apiLanguage);
})
)
控制台输出如下:
0.001
18.143
4.111
11.057
13.633
12.895
3.003
12.394
7.336
31.616
20.221
10.461
有没有办法提高准确率?
编辑:
性能会随着时间的推移而下降。
将 interval() 中的代码减少到只有一个 console.log 并没有表现得更好。
可能是 Angular 问题。
由浏览器决定为每个浏览器选项卡分配多少 CPU 个循环。根据资源(例如;电池)或 activity(背景选项卡与前景选项卡),您的浏览器页面将收到或多或少的 cpu 切片。
一些背景:https://github.com/WICG/interventions/issues/5
This is shipped in Edge as well now (as of EdgeHTML14). The clamping to 1Hz in background tabs, not anything more intensive.
除此之外;您也在测量通话的延迟时间:
timeseriesService.getQuote()
所以也可能是这个调用需要一些时间。
这确实是一个 Angular 问题。定时进程导致 Angular 不断重新呈现应用程序,这可能会占用大量资源。
我用runOutsideAngular()来规避这个问题。事实证明,我只需要 运行 Angular 之外的一个函数:
this.ngZone.runOutsideAngular(() => {
this.handleMouseEvents();
});
感谢 Mark van Straten 的意见!