Caching und mehr

TYPO3 bietet von Haus aus ausgefeiltes Caching von Front- und Backend an. Um das Das Frontend-Caching noch zu verbessern, empfehle ich den Einsatz der Extension staticfilecache. Werden allerdings Inhalte auf der Webseite zeitgesteuert automatisch geändert, dann können folgende Extensions behilflich sein den Cache regelmäßig neu aufzubauen: seo (System Extension) und sitecrawler.

1. EXT: staticfilecache

Die Extension ist einfach installiert. Hauptsächlich ist die Apache bzw. nginx Konfiguration anzupassen.
Hier ist es genau beschrieben: https://docs.typo3.org/p/lochmueller/staticfilecache/main/en-us/

Aufwändiger ist es möglicherweise alle USER_INT Objekte in USER Objekte zu ändern, damit die Seiten gecacht werden können.

2. EXT: seo

Diese Systemextension hat einige Vorzüge. U.a. kann damit recht einfach eine XML-Sitemap der kompletten Seite erstellt werden. Mit folgender Beispielkonfiguration werden 4 Sitemaps erstellt:

  1. Für die Seiten (pages)
  2. Für die Schulungen (Event-Datensätze gespeichert in Tabelle tx_sfeventmgt_domain_model_event)
  3. Für die Tipps News (News-Datensätze gespeichert in Tabelle tx_news_domain_model_news) 
  4. Für die Referenzen News (News-Datensätze gespeichert in Tabelle tx_news_domain_model_news)
# Pages, events and news in sitemap
plugin.tx_seo.config {
    xmlSitemap {
        sitemaps {
            #exclude pages (e.g. 404 error page and detail pages without parameter)
            pages.config.excludePagesRecursive = 4,5,6,21,23,31
            schulung {
                provider = TYPO3\CMS\Seo\XmlSitemap\RecordsXmlSitemapDataProvider
                config {
                    table = tx_sfeventmgt_domain_model_event
                    sortField = tstamp
                    lastModifiedField = tstamp
                    pid = 2
                    recursive = 1
                    url {
                        pageId = 4
                        fieldToParameterMap {
                            uid = tx_sfeventmgt_pieventdetail[event]
                        }
                        additionalGetParameters {
                            tx_sfeventmgt_pieventdetail {
                                controller = Event
                                action = detail
                            }
                        }
                    }
                }
            }
            tipps {
                provider = GeorgRinger\News\Seo\NewsXmlSitemapDataProvider
                config {
                    table = tx_news_domain_model_news
                    additionalWhere =
                    sortField = sorting
                    lastModifiedField = tstamp
                    changeFreqField = sitemap_changefreq
                    priorityField = sitemap_priority
                    pid = 19
                    recursive = 0
                    url {
                        pageId = 21
                        #useCategorySinglePid = 1
                        fieldToParameterMap {
                            uid = tx_news_pi1[news]
                        }
                        additionalGetParameters {
                            tx_news_pi1.controller = News
                            tx_news_pi1.action = detail
                        }
                        useCacheHash = 1
                    }
                }
            }
            references < .tipps
            references.config.pid = 22
            references.config.url.pageId = 23
        }
    }
}

sitemap.xml

Damit die Sitemap unter www.example.tld/sitemap.xml aufgerufen werden kann, kann die Seiten-Konfiguration über die config.yaml Datei angepasst werden.

  • In composer Installationen findet sich diese unter config/sites/siteid/config.yaml
  • In nicht-composer Installationen unter typo3conf/sites/siteid/config.yaml
routeEnhancers:
  PageTypeSuffix:
    type: PageType
    default: /
    index: /
    map:
      /: 0
      sitemap.xml: 1533906435

3. EXT: sitecrawler

Mittels der sitecrawler Extension kann jede einzelne Seite der XML-Sitemap versteckt aufgerufen werden, um den Seiten-Cache neu aufzubauen.

Die Extension ist schnell installiert. Das aufwändigste ist es den Cronjob zu konfigurieren.
Insbesondere ist darauf zu achten, dass die PHP Version des Cronjobs-Interfaces mit der PHP Version der TYPO3 Installation übereinstimmt.

Damit die TYPO3 Caches nächtlich geleert werden können, kann folgende TYPO3-Konfiguration verwendet werden:

config.cache_clearAtMidnight = 1

Update

Ich habe festgestellt, dass mit obiger Lösung unter

  • TYPO3 v12.4.3
  • staticfilecache
  • sitecrawler 

nicht alle Seiten nächtlich neu gecacht wurden.
Außerdem ist der direkte Aufruf des sitecrawlers per CronJob nicht die beste Idee. Wenn er über den scheduler eingerichtet wird, dann haben Backend-Benutzer eine bessere Kontrolle hierüber.

Meine neue Lösung:

  1. Installation der scheduler System-Extension
  2. Einrichtung des scheduler CronJobs, der alle 5 Minuten ausgeführt wird
  3. Erstellung der scheduler Aufgaben staticfilecache:flushCash und sitecrawler:crawl

zu 1.: Installation der scheduler System-Extension

In klassicher Installation kann die Extension scheduler direkt im TYPO3 Backend über “Erweiterungen” installiert werden. 
In Composer-Installation gelingt das mit folgendem CLI-Befehl. Danach noch über /typo3/install.php die Datenbankfelder aktualiseren, da das TYPO3 Backend / “Wartung” aufgrund des Datenbankfehlers nicht direkt erreichbar ist. 

composer require typo3/cms-scheduler

zu 2.: Einrichtung des scheduler CronJobs, der alle 5 Minuten ausgeführt wird

In Composer-Installationen sieht der Aufruf in etwa so aus

php machwert/typo3cms/vendor/bin/typo3 scheduler:run

Ggf. muss sichergestellt werden, dass die korrekte PHP Version benutzt wird. 
In meinem Fall (netcup als Hoster) sieht das so aus:

/usr/local/php81/bin/php machwert/typo3cms/vendor/bin/typo3 scheduler:run

Die Ausführung im Cron-Stil habe ich auf alle 5 Minuten wie folgt gesetzt:

*/5 * * * *


Im netcup Customer-Control-Panel sieht das so aus:

zu 3.: Erstellung der scheduler Aufgaben staticfilecache:flushCash und sitecrawler:crawl

Die folgende Konfiguration im TYPOScript kann damit wieder entfernt:

config.cache_clearAtMidnight = 1

Erstellt am: (aktualisiert am: )