Wie befülle ich den Cache automatisch? [gelöst]
Eingetragen von PhilippCar (90)
am 13.07.2022 - 16:02 Uhr in
am 13.07.2022 - 16:02 Uhr in
Mit folgendem Befehl kann ich über ein Costum Module den Cache leeren:
drupal_flush_all_caches();
Jedoch möchte ich - z.B. über einen Cron-Job - alle Caches wieder befüllen, damit die Ladezeit auch für den 1. Aufruf gering sind. Gibt es hierfür einen Befehl? Oder hat jemand eine Idee für eine Vorgehensweise?
- Anmelden oder Registrieren um Kommentare zu schreiben
Ich würde das ehrlich gesagt
am 22.07.2022 - 13:31 Uhr
Ich würde das ehrlich gesagt lassen. Drupal ist ja sehr gut darin, die verschiedenen Bereiche einer Seite dynamisch zu cachen, abhängig von der gerade besuchten Seite. "Alle Caches wieder befüllen" macht daher eigentlich keinen Sinn, weil nicht alles, was irgendwann mal gecacht war, auch immer wieder benötigt wird. "Alle Caches" ist viel zu schwammig und umfangreich. Und drupal_flush_all_caches() baut auch einige der Caches wieder auf, jetzt kein Cache bezüglich Rendering, aber einiges an Zwischenspeichern wird auch wieder aufgefüllt.
Wenn der erste Seitenaufruf sehr, sehr, sehr lang ist, würde ich an Deiner Stelle lieber schauen, ob Du an anderer Stelle optimieren kannst. Aber wenn das immer nur der erste Seitenaufruf ist und der jetzt auch nicht gleich 10 Sekunden braucht, würde ich einfach nicht so oft den Cache löschen :)
Das einzige, was mir einfallen würde, wäre entweder ein Clickbot, der über die Seite surft und damit auf jeder Seite die entsprechenden Bereiche zwischenspeichert (womit Du vorab definieren müsstest, welche Seiten das sein sollen), oder irdendeine Art von serverseitigem Pre-Rendering, wie er manchmal für Angular, React u.ä. Frameworks verwendet wird (und ich glaube, die funktionieren oft auch mit solchen Clickbots oder virtuellen Browsern). Die Frage ist aus meiner Sicht, wie groß das Projekt ist: schon ab 100 Seiten würde ich das so nicht mehr tun, weil der Aufwand, jede Seite zu cachen, viel zu hoch und oftmals auch umsonst ist (weil die zwischengespeicherten Daten sehr wahrscheinlich eh nie aufgerufen werden).
[gelöst]
am 22.07.2022 - 17:13 Uhr
Vielen Dank fürs Feedback Tobi!!!
Ich habe es nun gelöst, indem ich ein Custommodul ausgewählte Seiten aufruft. Dadurch werden jene im Cache zwischengespeichert und auch der erste Aufrufer der Seite hat keine lange Ladezeit.
Kannst Du den Code vielleicht
am 25.07.2022 - 08:46 Uhr
Kannst Du den Code vielleicht irgendwie hier oder in einem Blog teilen? Würde mich interessieren, wie Du das gemacht hast
Da gibt es ehrlich gesagt
am 01.08.2022 - 19:40 Uhr
Da gibt es ehrlich gesagt nicht viel Code:
- Custom Module musst du nach einer Vorlage passend der jeweiligen Drupalversion anlegen.
- In der PHP Version werden dann nur 2 Sachen innerhalb der classe/function programiert:
drupal_flush_all_caches();
// cache leeren
und die jeweilige Seite nochmal aufrufen, damit der Cache befüllt wird. z.B. per IFrame in ein HTML-Template
<iframe width="1" height="1" src="'.$iframe_url4.'" frameborder="0" allowfullscreen></iframe>
Und nicht vergessen:
Cache-Interwall auf der config Seite "Performance" auf 0 oder 24 Stunden setzen - je nach ANwendungsfall.