Ng-lazyload-image: Zeitüberschreitungen des Winkelmessers

Erstellt am 6. Dez. 2016  ·  7Kommentare  ·  Quelle: tjoskar/ng-lazyload-image

Wenn der Winkelmessertest ausgeführt wird, wird bei jeder Komponente, die die Lazy-Load-Direktive verwendet, ein Zeitlimit überschritten. Der Winkelmesser überwacht die ngZone, um zu wissen, wann anstehende xhr-Anrufe, Zeitüberschreitungen und Intervalle abgeschlossen sind, bevor sie ausgeführt wird.
Im scroll-listener.ts das .sampleTime(100, scheduler) ein Intervall, das während eines Winkelmessertests niemals endet. Ich habe einen Weg gefunden, dies zu umgehen, indem ich der Anweisung den folgenden Code hinzugefügt habe

ngAfterContentInit() {
    this.ngZone.runOutsideAngular(() => { // run outside angular
      this.scrollSubscription = getScrollListener(this._scrollTarget)
        .filter(() => this.isVisible())
        .take(1)
        .switchMap(() => this.loadImage(this.lazyImage))
        .do(() => this.setImage(this.lazyImage))
        .finally(() => this.setLoadedStyle())
        .subscribe(() => this.ngOnDestroy(),
        error => {
          this.setImage(this.errorImg || this.defaultImg);
          this.ngOnDestroy();
        });
    });
  }

Laut diesem https://github.com/angular/protractor/issues/3349#issuecomment -232253059 überwacht der Winkelmesser die Haupt-ngZone. Wenn wir also das Intervall ausführen, wird der Winkelmesser erfolgreich ausgeführt. Ich bin mir nicht sicher, wie dies mit den Winkelmessertests für dieses Projekt funktionieren würde, aber ich kann versuchen, bei Gelegenheit eine Pull-Anfrage zu stellen.

Hilfreichster Kommentar

Na klar, ich schaue in der nächsten Woche, ob ich noch einen reinbekomme :)

Alle 7 Kommentare

Vielen Dank für Ihre Rückmeldung.
Dies kann ich jedoch nicht reproduzieren. Ich verwende in diesem Projekt einen Winkelmesser und es scheint gut zu funktionieren. Trotzdem kann es eine gute Idee sein, ngZone.runOutsideAngular zur Leistungsverbesserung zu verwenden. Aber wenn wir ngZone.runOutsideAngular , müssen wir ChangeDetectorRef nachdem wir das Bild träge geladen haben, richtig? So eckig weiß, dass die Ansicht neu gerendert werden muss.

Da kann ich dies nicht reproduzieren und es scheint, dass Sie eine funktionierende Lösung haben. Sie möchten eine PR einreichen?

Na klar, ich schaue in der nächsten Woche, ob ich noch einen reinbekomme :)

Ich habe eine neue Version des Plugins erstellt. Können Sie es ausprobieren: npm install [email protected] zu sehen, ob es das Problem behebt?

Sicher! Ich probiere es heute aus

Schließen Sie dies. Lassen Sie mich wissen, wenn Sie immer noch Timeouts haben.

@tjoskar hat das gerade heute getestet und es funktioniert, danke für die Korrektur! :)

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen