Ich bin auf der Suche nach der besten Möglichkeit zur Implementierung einer Optimierung für sehr teure Methode, die mehrere Parameter und gibt eine Observable zurück. Gibt es eine elegante Art, es zu tun?Memoize für Observables in Typescript
Was ich suche ist hübschere Version davon:
class Example {
constructor(
private databaseService: DatabaseService,
private someService: SomeService)
expensive(param1: string, param2: string) : Observable<string> {
if (isMemoraized(param1,param2) {
return Observable.create(observer=>
observer.next(memorizedValue(param1, param2));
observer.complete();
} else {
return Observable.create(observer=>{
Observable.forkJoin([
this.databaseService.getValue(param1, param2),
this.someService.fetchDataFromServer(param2)].subscribe(
results => {
let result = results[0] + ' ' + results[1];
memorizeValue([param1,param2], result);
observer.next(result);
observer.complete();
});
});
}
}
}
jede Hilfe dankbar!
Der Dienst sollte wahrscheinlich Cache-Speicher anstelle von grundlegenden Memoization implementieren. Sollten die Ergebnisse nie ablaufen? Wie viele Anfragen sollen gespeichert werden? Was passiert, wenn eine Fehlerreaktion ausgelöst wird? – estus
Ja - Ich bevorzuge Cache-Speicher über grundlegende Memoization und vorzugsweise ein Paket, das alles einschließlich Ablaufzeiten, Methoden zum Löschen des Cache und so weiter haben wird ... In Bezug auf die Anzahl möglicherweise Hunderte. – karruma
Ich würde dann etwas wie https://github.com/jmdobry/CacheFactory vorschlagen. Wie beim Cacheschlüssel könnte es etwas wie 'JSON.stringify ([param1, param2])' sein. – estus