Ankündigung

Einklappen
Keine Ankündigung bisher.

Caching von Template-Dateien

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Caching von Template-Dateien

    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.

  • #2
    Während der Entwicklung Caching abschalten. Während des Einsatzes nur auf explizites Verlangen neu transformieren.
    Meinungen, die ich geäußert habe, sind nicht notwendigerweise meine eigenen. Abweichungen von der deutschen Rechtschreibung unterliegen dem Urheberrecht, dürfen aber unter den Bedingungen von verwendet werden

    Kommentar


    • #3
      Während der Entwicklung Caching abschalten. Während des Einsatzes nur auf explizites Verlangen neu transformieren.
      Halte ich auch für die beste Idee. Vielleicht noch mit dem Zusatz, dass man für Bereiche explizit das Caching-Verhalten festlegen kann.

      Kommentar


      • #4
        Hallo Unic,

        Gibt es eventuell Frameworks/Klassen/Funktionen die mir diese Arbeit erleichtern /abnehmen.
        Du kannst dir mal View based caching - ein HOWTO :: Adventure PHP Framework (APF) ansehen. Dort wird Template-Caching auf Basis des APF implementiert. Das dort beschriebene Framework hat bereits eine XML-Syntax für den Aufbau von Templates. Unter Why APF? :: Adventure PHP Framework (APF) findest du eine Übersicht der Features und sollte auf den ersten Blick auf deine Anforderungen alle Bereiche abdecken.
        Viele Grüße,
        Dr.E.

        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
        1. Think about software design [B]before[/B] you start to write code!
        2. Discuss and review it together with [B]experts[/B]!
        3. Choose [B]good[/B] tools (-> [URL="http://adventure-php-framework.org/Seite/088-Why-APF"]Adventure PHP Framework (APF)[/URL][URL="http://adventure-php-framework.org"][/URL])!
        4. Write [I][B]clean and reusable[/B][/I] software only!
        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

        Kommentar


        • #5
          Die Caching-Strategie richtet sich primär nach den Anforderung. Wenn die Seite "nur" weitgehend statische Inhalte wie Blogartikel hat, dann kann man sicherlich auch nur auf Anforderung die Transformation erneut starten. Wenn du allerdings eine Webanwendung im Multi-User-Betrieb hast und jeder sofort die neusten Daten sehen soll, dann wird es eng mit dem Caching. Insofern empfiehlt es sich keine globale Caching Policy zu implementieren, sondern unterschiedliche Policies für unterschiedliche Bereiche des Projekts zu implementieren.

          Kommentar


          • #6
            Exakt deshalb ist ja view based caching als ein granulares Konzept so gut geeignet. Dort hast du die Möglichkeit, quasi-statische Views mit Caching zu versehen und personalisierte Bereiche auszusparen.
            Viele Grüße,
            Dr.E.

            ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
            1. Think about software design [B]before[/B] you start to write code!
            2. Discuss and review it together with [B]experts[/B]!
            3. Choose [B]good[/B] tools (-> [URL="http://adventure-php-framework.org/Seite/088-Why-APF"]Adventure PHP Framework (APF)[/URL][URL="http://adventure-php-framework.org"][/URL])!
            4. Write [I][B]clean and reusable[/B][/I] software only!
            ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

            Kommentar


            • #7
              Zitat von mimomamu Beitrag anzeigen
              Während der Entwicklung Caching abschalten. Während des Einsatzes nur auf explizites Verlangen neu transformieren.
              ... oder ein live- und ein Entwickler-System aufsetzen. Im live-Betrieb werden IMMER die Cache-Daten geladen. Bei Bedarf kann dann auf Basis des Entwickler-Systems neu transformiert werden. Hat den Vorteil, dass du parallel arbeiten und diverse Anpassungen zu Genüge im Vorfeld testen kannst, bevor es live geht.

              Kommentar

              Lädt...
              X