Neuer EP `CACHE_WARMUP_CREATE_IMAGE_BEFORE` zum Umgang mit responsive Medientypen (Yakme)
Nach Feedback von @tbaddade im Slack.
Aktuell können mittels EP CACHE_WARMUP_IMAGES_WITH_MEDIATYPES Bilder samt Medientyp hinzugegeben werden. Cache Warmup prüft jedoch anhand des Dateinamens, ob das Bild existiert, bevor die Cachefiles generiert werden. Yakme nutzt spezielle Medientypen, die einen Effekt enthalten, der anhand von Suffixen am Dateinamen die zugehörigen Bilder generiert, z. B.
/index.php?rex_media_type=1by1&rex_media_file=fb_mg_0932.jpg-yakme-400
Der Mediatyp ist 1by1, die Bilddatei fb_mg_0932.jpg und der Suffix ist -yakme-400. Letzter sorgt dafür, dass das Bild innerhalb des Effekts in 400px generiert wird. Übergibt man Cache Warmup nun aber die Datei fb_mg_0932.jpg-yakme-400, wird diese nicht gefunden und entsprechend aussortiert, so dass kein Cachefile generiert wird.
Die Situation könnte über einen zusätzlichen EP in lib/generator_images.php gelöst werden:
if (method_exists('rex_media_manager', 'create')) {
$create = rex_extension::registerPoint(new rex_extension_point('CACHE_WARMUP_CREATE_IMAGE_BEFORE', $create = true, [$image, $type]));
if ($create) {
rex_media_manager::create($type, $image);
}
}
Gerne nochmal allgemein im Hinblick auf andere Varianten von virtuellen Mediatypen und/oder responsive Images bewerten, ob dies eine gute Lösung ist.
Mit etwas Abstand halte ich die oben beschriebene Lösung, einen weiteren EP zu ergänzen, für nicht sinnvoll.
Zum einen macht es die Sache komplexer, statt einfacher. Das sollte niemals das Ziel sein, und wir sollten vielmehr daran arbeiten, Komplexität zu vermindern.
Zum anderen versucht der EP am Ende der Kette ein konzeptionelles Problem zu beheben, das sich viel besser weiter vorne lösen ließe: Cache Warmup arbeitet aktuell nicht mit Filenames, sondern mit IDs. Das Frontend verwendet sie innerhalb von GET-Requests, um diese möglichst knapp und generisch zu halten. Und natürlich können nur IDs von Bildern ermittelt werden, die auch wirklich existieren. Deshalb ist es aktuell kaum sinnvoll möglich, die oben genannten responsiven Bilder mit Suffix von Cache Warmup verarbeiten zu lassen. Mit dem vorgeschlagenen neuen EP könnte man nun Bilder am Ende des Workflows einhängen, müsste sich aber selbst drum kümmern, unschön.
Ich denke also, Cache Warmup sollte angepasst werden:
- Filenames statt IDs nutzen, so dass Infos im Dateinamen verwendet werden können
- POST- statt GET-Requests verwenden, um mit den Filenames nicht ins Limit zu laufen
Ich habe einen anderen Ansatz gewählt. Bei mir werden die Bilder über https://github.com/alexplusde/media_manager_responsive bei Aufruf des Artikels generiert und zwar in den benötigten Größen und nur mit den Bildprofil-Bild-Kombinationen, die tatsächlich benötigt werden.
Somit muss man sich nur noch um den Aufruf der Seiten kümmern.
@alxndr-w Du hast es vermutlich missverstanden. Die Bilder von Yakme werden auch bei Aufruf des Artikels generiert, so wie sie zum Zeitpunkt des Aufrufs benötigt werden. Hier im Issue selbst ging es darum, die Bilder Cache-Warmup zusätzlich bekannt zu machen.
An dieser Stelle wird sicherlich nichts mehr passieren, deshalb schließe ich mal.