Hallo Community,
Ich arbeite derzeit an einem Framework, das eine Abstrake XML-Syntax für Template Aufgaben einsetzt. Dabei ist es Möglich aus einer Template-Datei heraus von Basis-Template-Dateien zu erben (also diese zu erweitern, um Beispielsweise ein Design wiederzuverwenden) sowie andere Template-Dateien direkt einzubinden (entspr. include "blah.bla"; in PHP). Der komplette Vorgang wird mittels einer XML-Stylesheet-Transformation (XSLT) gelöst und funktioniert auch wunderbar.
Mein "Problem" ist die Performance. Sie ist zwar nicht extrem schlecht, aber bei großen Dokumenten und tiefen Verschachtelungen gibt es eine merkliche Verzögerung (geschätzte 0.5 sekunden).
Meine Idee ist die fertig transformierten Templates zu cachen, denn was anderes bleibt mir wohl kaum übrig. Nur frage ich mich anhand welches Kriteriums ich die erneute Transformation am besten starte? Möglich wäre es neu zu übersetzen sobald sich eine Datei in der extend/include Hierarchie ändert, was man mittels des Änderungsdatums der Datei feststellen könnte. Das klingt erstmal ganz gut, aber dafür ist es nötig die gesamte Hierarchie zu durchlaufen um festzustellen ob die Dateien geändert wurden oder nicht. Das schliest natürlich das öffnen der Dateien, also einer Menge Dateisystemzugriffe, sowie das Parsen mittels des XMLReaders ein und genau das möchte ich ja vermeiden.
Eine andere Möglichkeit die mir spontan einfällt ist die Dateien einfach nach einer festgelegten Zeit neu zu transformieren. Während der Entwicklung einer Webseite könnte man diese Zeit auf 0 herunterdrehen um Änderungen am Code direkt beobachten zu können. Wird die Seite dann online gestellt und die Anzahl der Zugriffe steigt wird die Zeit eben auf einen Entsprechenden Wert heraufgesetzt um unnötige Last auf dem Server zu vermeiden.
Gibt es hier jemanden der schonmal Erfahrungen in diese Richtung gesammelt hat? Gibt es eventuell Frameworks/Klassen/Funktionen die mir diese Arbeit erleichtern /abnehmen. Oder hat PHP einen eingebauten Cache-Mechanismus was Dateisystem-Zugriffe betrifft?
Ich bin für jeden Hinweis und jeden Gedanken zu dem Thema dankbar!
viele Grüße, Unic.
Ich arbeite derzeit an einem Framework, das eine Abstrake XML-Syntax für Template Aufgaben einsetzt. Dabei ist es Möglich aus einer Template-Datei heraus von Basis-Template-Dateien zu erben (also diese zu erweitern, um Beispielsweise ein Design wiederzuverwenden) sowie andere Template-Dateien direkt einzubinden (entspr. include "blah.bla"; in PHP). Der komplette Vorgang wird mittels einer XML-Stylesheet-Transformation (XSLT) gelöst und funktioniert auch wunderbar.
Mein "Problem" ist die Performance. Sie ist zwar nicht extrem schlecht, aber bei großen Dokumenten und tiefen Verschachtelungen gibt es eine merkliche Verzögerung (geschätzte 0.5 sekunden).
Meine Idee ist die fertig transformierten Templates zu cachen, denn was anderes bleibt mir wohl kaum übrig. Nur frage ich mich anhand welches Kriteriums ich die erneute Transformation am besten starte? Möglich wäre es neu zu übersetzen sobald sich eine Datei in der extend/include Hierarchie ändert, was man mittels des Änderungsdatums der Datei feststellen könnte. Das klingt erstmal ganz gut, aber dafür ist es nötig die gesamte Hierarchie zu durchlaufen um festzustellen ob die Dateien geändert wurden oder nicht. Das schliest natürlich das öffnen der Dateien, also einer Menge Dateisystemzugriffe, sowie das Parsen mittels des XMLReaders ein und genau das möchte ich ja vermeiden.
Eine andere Möglichkeit die mir spontan einfällt ist die Dateien einfach nach einer festgelegten Zeit neu zu transformieren. Während der Entwicklung einer Webseite könnte man diese Zeit auf 0 herunterdrehen um Änderungen am Code direkt beobachten zu können. Wird die Seite dann online gestellt und die Anzahl der Zugriffe steigt wird die Zeit eben auf einen Entsprechenden Wert heraufgesetzt um unnötige Last auf dem Server zu vermeiden.
Gibt es hier jemanden der schonmal Erfahrungen in diese Richtung gesammelt hat? Gibt es eventuell Frameworks/Klassen/Funktionen die mir diese Arbeit erleichtern /abnehmen. Oder hat PHP einen eingebauten Cache-Mechanismus was Dateisystem-Zugriffe betrifft?
Ich bin für jeden Hinweis und jeden Gedanken zu dem Thema dankbar!
viele Grüße, Unic.
Kommentar