Funktionen cachen

19/08/2009 - 09:31 von Wolf Behrenhoff | Report spam
Hallo,

ich frage mich gerade, wie man am sinnvollsten Ergebnisse von Funktionen
cached. Soll ganz simpel sein und der Cache soll auch erst mit
Programmende auslaufen.

Beispiel: Ich habe ein Modul, das hat eine sub getListe. Die Liste wird
duch XML-Parsen einer Website erstellt. Diese Liste àndert sich zur
Laufzeit des Programms nicht (und wenn, dann ist es auch egal), sodass
ich sie nicht bei jedem Zugriff auf getListe neu laden möchte.

Nun habe ich das so gelöst:

my $cache_getListe;
sub getListe {
return @$cache_getListe if $cache_getListe;
$cache_getListe = (mach was mit XMLin(LWP::get(url)));
@$cache_getListe;
}

Und bei Funktionen in Objekten habe ich dann jeweils ein
$self->{cached_Funktionsname} abgetestet/returned/gesetzt. Nur erscheint
mir das ganze irgendwie nicht elegant. Gibt es da ein passendes Modul,
das mir das Cachen abnimmt? (ich brauche es in mehreren Funktinen) Eine
Suche nach Cache liefert viel, aber was Passendes habe ich noch nicht
gefunden. Es handelt sich nicht um eine Webanwendung.

Eine andere Idee von mir war, dass ich einfach eine sub cached_LWPget()
schreiben könnte. Aber dann würde bei jedem Aufruf das XML neu geparst
werden müssen. Die Anwendung ist überhaupt nicht performancekritisch,
das wàre also eigentlich kein Problem und sicher die einfachste Lösung.
Aber ich würde einen automatischen Cache des Gesamtergebnisses schöner
finden, zumal ich auch die Ausgabe von externen Programmen cache, also
dann auch noch ein cached_backticks() brauchen würde.

- Wolf
 

Lesen sie die antworten

#1 Peter J. Holzer
19/08/2009 - 14:56 | Warnen spam
On 2009-08-19 07:31, Wolf Behrenhoff wrote:
ich frage mich gerade, wie man am sinnvollsten Ergebnisse von Funktionen
cached. Soll ganz simpel sein und der Cache soll auch erst mit
Programmende auslaufen.


[...]
Und bei Funktionen in Objekten habe ich dann jeweils ein
$self->{cached_Funktionsname} abgetestet/returned/gesetzt. Nur erscheint
mir das ganze irgendwie nicht elegant. Gibt es da ein passendes Modul,
das mir das Cachen abnimmt?



Memoize

(wobei ich mir nicht sicher bin, wie gut das bei Objekt-Methoden
funktioniert)

hp

Ähnliche fragen