-
Notifications
You must be signed in to change notification settings - Fork 14
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Cache Warmup als Cronjob #1679
Comments
Finde die vorgeschlagene Lösung eigentlich gut, da die Performance-Probleme wahrscheinlich eher bei den wenigen Instanzen auftaucht, welche sowieso Ressourcen z.B.für die Konfiguration des System Task-Schedulers verfügbar haben. Finde es aber aus folgenden Gründen auch nicht gut: da es andererseits nur eine Lösung für Instanzen darstelle, welche nicht nur Webspace gemietet haben (sind wahrscheinlich nicht wenige), die den Cache konfiguriert haben und die das entsprechende Know-How besitzen. Und schlussendlich denke ich, dass es sich weiterhin nur um das konzentrieren auf Symptome des Grundproblems handelt. Also das Grundproblem des Zeitrahmen-Designs.1 Es wäre also vielleicht eine Abwägung von
Denn eine Änderung des Zeitrahmen-Design ist zwar mehr Aufwand, aber gar nicht so komplex und am Ende auch für mehr User des Plugins relevant. Sie könnte z.B. wie folgt aussehen (die Vorschläge sind alternativ zu sehen und sortiert von viel Aufwand zu weniger Aufwand):
Der letzte Punkt (C) wäre natürlich sehr unaufwändig durch wenige Code-Zeilen umzusetzen, aber nach wie vor auch nur Symptom-Bekämpfung. Ich bin mir aber noch unsicher wie groß die Performance-Gewinne hier am Ende wären. Bin noch nicht dazu gekommen es zu testen. Footnotes
|
Ich stimme dir grundsätzlich zu. Leider habe ich schon einiges durchprobiert und das wäre eine sehr einfache Lösung. Vor allem hat die Flotte viele Karten, die auch etwas spezieller sind. Wenn die regelmäßig aufgewärmt werden könnten die auch flotter aufgerufen werden.
Bei meinen Tests hat es einen großen Unterschied gemacht ob der Cache aufgewärmt ist oder nicht. Daher kam die Idee.
Wenn es einmal eingerichtet ist, dann ist das set it and forget it.
Das Problem hierbei ist, dass Zeitrahmen viele Metafelder hat und es dann auch ein großer Aufwand wäre neue Spalten einzurichten.
Das wurde hier schonmal probiert: #1575 Der Performancegewinn war aber leider nur minimal, der Aufwand erheblich und es traten an vielen Stellen unerwartete Probleme auf.
Die Idee finde ich gut und das wäre auch neu. Vielleicht als regelmäßiger Job, der Buchungen die älter als ein Monat sind archiviert?
Ich habe auch mal probiert diese Queries zu optimieren, das ist leider auch fehlgeschlagen: #1583 |
@hansmorb Spannend! Danke für die ganzen Infos. Ich antworte nur mal auf die Punkte, die für mich noch Fragen aufwerfen.
Das habe ich total vergessen, aber erinnere mich daran, habe es damals gar nicht so eng verfolgt. Ich habe mir den Branch angeschaut und frage mich wieso du die beiden DATETIME-Spalten der
Ja genau. Das lässt sich eigentlich auch sehr schnell auf einer Umgebung mit genügend Timeframes testen. Ggf. wäre die Nutzung des System Scheduler dafür dann gar nicht nötig. Aber wenn du eh schon weißt wie es geht, ist das ja ggf. gar nicht mehr so ein Akt. Ich würde mir dessen Nutzung auch wünschen. Einziger Punkt gegen den post_status: Ich hatte nur in Erinnerung das die Query-Logik in Wordpress oder CommonsBooking (weiß leider nicht mehr wo das im Code auftaucht) einen Array von Post-IDs (teilweise mehrere dutzend oder >100) mitgibt, welche dann schon auf die |
Guter Einwand, hätte ich wohl mal besser in meiner Datenbank-Vorlesung aufgepasst ;) Ja vielleicht bringt das ja den entscheidenden Performanceschub. Ich habe nur glaube ich in nächster Zeit keinen Kopf mehr mich da nochmal intensiv reinzulesen und das anzupassen sowie da die Fehler auszumerzen.
Welche Nutzung würdest du dir wünschen? Also der Cronjob so wie er oben beschrieben ist oder das System mit dem post_status?
Stimmt! Die getPostIdsByType kümmert sich nicht um den post_status. Und da die Rückgabe dieser Funktion dann von der getPostsByBaseParam gefiltert wird wäre da vermutlich nichts zu gewinnen. |
Kann ich verstehen, die Entwicklung des ganzen Branchs fertigzustellen ist natürlich ein andere Punkt. Ist der Aufwand nur zum Testen des Index-Setups im bestehenden Branch vertretbar? Also könnte ich den Branch auschecken, den Index verändern und es direkt testen oder kommt etwas mehr Arbeit auf mich zu? Habe jetzt nicht gesehen ob ich es per Hand migrieren muss etc.
Ne den Cronjob. Wir haben z.B. manchmal weniger Traffic, d.h. der normale Scheduler läuft dann auch nur wenn mal jemand auf die Seite kommt.
Ja das meinte ich! Da müssten wir vermute ich nochmal ran, vielleicht gibt es einen besseren Weg. Also nicht erst ausschließlich nur auf die postmeta Tabelle. |
Bei Instanzen, die viele Ansichten haben, kann es bei Aufruf eines Shortcodes zu langen Wartezeiten kommen, wenn zwischen diesem und dem letzten Aufruf zu viel Zeit vergangen ist. Wenn diese selten aufgerufenen Shortcodes auch noch viele Zeitrahmen abbilden, kann es für die Nutzenden zu längeren Wartezeiten kommen (Mehr dazu). Ein regelmäßig laufender Warmup Job könnte da Abhilfe schaffen. Dieser würde nach einem vordefinierten Intervall alle Shortcodes einmal ausführen und jede Kartenansicht laden. Damit das Sinn ergibt, muss jedoch WP-Cron in den System Task Scheduler eingebunden werden . Falls das nicht gemacht werden würde, wird WP-Cron nur bei Seitenaufruf gestartet. Damit wäre wahrscheinlich nicht viel gewonnen. Der Cronjob müsste dann auch mindestens alle 15 Minuten aufgerufen werden, damit die restlichen Jobs wie Reminder und Cleanup weiterhin funktionieren.
Vorteile:
Nachteile:
Risiken:
Falls wir das implementieren würde ich vorschlagen es als standardmäßig deaktivierte Option unter "Erweiterte Optionen" bei den Cacheeinstellungen zu verstecken. Dazu würde ich auch noch einen Hinweis auf die Einbindung von WP-Cron in den System Task Scheduler als Voraussetzung geben. Wir könnten auch die Konstanten DISABLE_WP_CRON als Indikator dafür nehmen, ob der System Task Scheduler aktiv ist.
The text was updated successfully, but these errors were encountered: