Template-Engine: Dateien vergleichen

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Template-Engine: Dateien vergleichen

    Hallo,

    Für meine Template-Engine möchte ich einen Cache haben. Schliesslich macht es keinen Sinn jede View neu zu verarbeiten, bzw in PHP-Code zu verwandeln.
    Der Cache soll etwa so funktionieren (wie ein Cache eben funktioniert...): Es wird geguckt ob die aufzurufende View bereits gecached ist, wenn nicht wird sie in PHP-Code verwandelt welcher ausgeführt und abgespeichert wird. Wenn eine Datei sich ändert, soll auch der Cache aktualisiert werden.

    Nur wie? Mir kam die Idee per md5_file() die view zu hashen und zu schauen ob eine Cache-Datei mit dem Hash als Namen existiert. Wenn nicht wird diese angelegt, wenn doch ausgeführt.
    Doch das gibt einige Probleme:
    1. Wenn eine Datei geändert wird, wird auch eine neue Cache-Datei erstellt. Was passiert aber dann mit der alten?
    2. Ich denke nicht dass das allzu performant ist, immer den md5-Hash einer ganzen Datei zu berechnen, besonders nicht bei grossen Dateien.

    Wie könnte man das also noch machen?

    Danke im voraus.

    greez

    bitsnack
  • 1.) Die alte Datei wird gelöscht / überschrieben?
    2.) Hash einfach nur den Datei Namen ...

    Bei mir sieht da so aus ...

    Quellcode

    1. $cache->set($key, $content);
    2. $cache->get($key, $lifetime);


    Naja das ganze musst du auf dein Vorhaben abändern. Aber ich würde einfach den Datei Namen hashen bzw irgend einen kryptischen Namen erzeugen, das sollte reichen ...
  • Dann wird aber nicht bemerkt wenn die View/das Template geändert wird.
    Ich habe es jetzt noch nicht programmiert, aber einiges getestet: Ich werde die Cache-Datei einfach so wie das Template nennen und bei jedem laden prüfen, ob das Änderungsdatum und die Dateigrösse sich geändert haben. Jenachdem nimmt es dann eben die Cache-Datei oder eben das orginal-Template.
    Weil die Cache-Datei so auch immer den gleichen Namen hat, wird es einfach überschrieben wenn sie erneuert wird.
    Das ganze ist auch um ein Vielfaches schneller als md5_file().