2017-11-28 1 views
0

シナリオ:apollo.watchQuery stacks/duplicates =パフォーマンスの問題?

ウェブアプリケーションはAngular 5、apollo-angular、apollo-clientで作成されています。

プロジェクトにデータをサブスクライブするコンポーネントがあります。 OnInit()私はdocsで指定されているように、apollo.watchQuery()を呼び出します。ここまでは順調ですね!サブスクリプションは、コンポーネントに移動するとき、および同じモデルの突然変異クエリで値を返すときにデータを取得します。すばらしいです!

私のアプリでクリックしたときに、apolloでCRUD操作をたくさんやっていると、アプリが遅くなり、遅くなるという問題があります。私が気づいたことの1つは、別のコンポーネントに移動し、以前に言及したプロジェクトコンポーネントに戻ると、私のApollo Chrome Dev Toolsで、以前のアクティブなWatchQueryプロジェクト(以下の画像では19)がputとanother 1つ(35個)が追加されます。

これは問題がありますか?冗長なアクティブなWatchQueriesがクライアントセッションで不要なメモリを占有し、アプリケーションが遅くなり、遅くなる、またはこれが正常であることを確認しますか?コンポーネントのOnDestroyメソッドでwatchedQueriesを手動で終了する必要がありますか?その場合、どうすればいいですか(これについては、ドキュメントでは何も言及できませんでした)。

Redundant watchQueries

答えて

0

はい、私は正確に同じ問題を持っていた、watchQueriesを解除する必要があります。しかし、単純な.query()は問題ありません。
私は公演についてはよく分かりませんが、たくさんの演奏がある場合は問題になると思います。私のアプリでは、破壊されたコンポーネントのwatchQueryはまだ何かをしていて、予期しない動作を引き起こしていました。

退会する最も良い方法は、RxJSのtakeUntilオペレータと、OnDestroyの方法で完了した科目を使用することです。 https://stackoverflow.com/a/41177163/3859915

例(アポロ2.0とRxJS賃貸可能オペレータと):
このanwserを見る

import { Subject } from 'rxjs/Subject'; 
import { takeUntil } from 'rxjs/operators'; 

export class MyComponent implements OnInit, OnDestroy { 
    private ngUnsubscribe: Subject<void> = new Subject<void>(); 

    ngOnInit() { 
     this.apollo.watchQuery({...}) 
      .valueChanges 
      .pipe(takeUntil(this.ngUnsubscribe)) 
      .subscribe(response => { 
       ... 
      }); 
    } 

    ngOnDestroy() { 
     this.ngUnsubscribe.next(); 
     this.ngUnsubscribe.complete(); 
    } 
} 
関連する問題