0

我正在ng-cli使用Angular 2RxJs。我正在尝试做的简单解释是:我正在使用 RxJs 不断地将 XHR 生成到后端 REST 端点。我注意到,如果我制作这些 XHR 的频率是 100 毫秒、500 毫秒甚至 1000 毫秒,通过查看 Chrome/FireFox 开发者工具的网络视图,我可以看到很多 XHR 处于待处理状态;它们开始需要 200 毫秒到 1.5 秒,但随着 XHR 数量的增加,这些请求需要 10 秒到 20 秒才能完成;它们堆积起来,所有后来的 XHR 最终都处于未决状态。

TypeScriptRxJs对象一起使用的代码如下所示。

private initStreaming(): void {
  this.playSubject = new Subject<boolean>();
  this.pauseSubject = new Subject<boolean>();
  let interval = Observable.interval(100)
    .map(() => this.myService.queryTransactions(this.getQueryRequest()))
    .flatMap(v => v);
  let pause = Observable.from(this.pauseSubject).mapTo(Observable.of(false));
  let resume = Observable.from(this.playSubject).mapTo(interval);
  this.timer = Observable
    .merge(pause, resume)
    .startWith(interval)
    .switchMap<Observable<boolean> | Observable<QueryResponse>, boolean | QueryResponse>(v => v)
    .scan<boolean | QueryResponse, QueryResponse>((acc, curr) => {
      if (curr && typeof curr === 'boolean') {
        return acc;
      } else {
        return curr as QueryResponse;
      }
    }, undefined);

  this.subscription = this.timer.subscribe(
    data => {
      if (undefined !== data && undefined !== data.transactions) {
        if (this.queryResponse === undefined) {
          this.queryResponse = data;
        } else if (this.queryResponse && data) {
          if (this.shouldSwap(this.queryResponse, data)) {
            this.queryResponse = data;
          }
        }
      }
    }
  );
}

我已经阅读过websockets,这可能是将数据(如果它在服务器上更改)推送到客户端的更好方法,而不是这种拉数据的方法(无论它是否在服务器上更改)。但那是另一篇文章,IMO。

无论如何,关于如何改进此代码的任何想法?

4

0 回答 0