Приложение Angular часто занимает слишком много времени при загрузке пути с помощью преобразователя, использующего ssr

#node.js #angular #rxjs #server-side-rendering #angularfire

Вопрос:

У меня возникли некоторые проблемы с обслуживанием моего приложения с помощью ssr. Он отлично работает, когда он загружается при обычном использовании ng s --o . Но когда я обслуживаю его npm run dev:ssr и загружаю путь, иногда требуется очень много времени для обслуживания при использовании приведенного ниже решателя. Достаточно для тайм-аута при развертывании (>60 секунд). Я использую узел 10.

решение.решатель.ts

 import { Injectable } from '@angular/core';
import { AngularFirestore } from '@angular/fire/firestore';
import {
  Resolve,
  RouterStateSnapshot,
  ActivatedRouteSnapshot
} from '@angular/router';
import { from, Observable } from 'rxjs';
import { map, mergeMap, reduce } from 'rxjs/operators';
import { Solution } from './Solution.type';
import { AngularFireStorage } from '@angular/fire/storage';

@Injectable({
  providedIn: 'root'
})
export class SolutionResolver implements Resolve<Solution[]> {
  constructor(
    private firestore: AngularFirestore,
    private storage: AngularFireStorage
  ) {}
  resolve(
    route: ActivatedRouteSnapshot,
    state: RouterStateSnapshot,
  ): Observable<any> { // Solution[]
    return this.firestore.collection('solutions').get() // Observable<doc>
    .pipe(
      map( snapshot => snapshot.docs.map( doc => doc.data() ) as Solution[]), // Observable<Solution[]>
      mergeMap( solutions => from(solutions) ), // stream of Observable<Solution>
      mergeMap( solution => {
        return this.storage.ref( solution.image ).getDownloadURL()
        .pipe( map( url => ({...solution, image: url}) ))
      }), // stream of <Observable<Solution>
      reduce( (acc: Solution[], value ) => {acc.push(value); return acc; }, []) // <Observable<Solution[]>
    )
  }
}
 

Проблема может быть связана с this.storage.ref( solution.image ).getDownloadURL() . В консоли нет сообщений об ошибках. Что еще хуже, иногда это работает так, как ожидалось.

Ранее у меня была та же проблема с использованием getDownloadURL трубы из angularfire : https://github.com/angular/angularfire/blob/master/docs/storage/storage.md#downloading-files

Есть идеи, что происходит не так?

обновление: Вероятно, это связано с этой проблемой: https://github.com/angular/angularfire/issues/2725

Комментарии:

1. Вы добавили console.time инструкции, чтобы проверить, действительно ли это было причиной проблемы?

2. @David Регистрация непосредственно перед this.storage.ref( solution.image ).getDownloadURL() тем, как на самом деле работает так, как ожидалось. Но конечный результат не всегда своевременно подается в мой браузер. Однако без извлечения this.storage.ref( solution.image ).getDownloadURL() этого не происходит.