FriendsOfREDAXO / cache_warmup

Generiert den Cache vorab, so dass die Website bereits beim Erstaufruf performant läuft
MIT License
41 stars 2 forks source link

EPs zum Filtern der zu generierenden Objekte #90

Closed schuer closed 6 years ago

schuer commented 6 years ago

Ich habe wie vor einiger Zeit besprochen mehrere EPs eingebaut, um eingreifen zu können, welche Cachefiles generiert werden sollen.

Die EPs greifen bereits nach der Selektion durch das AddOn ein, und nicht erst kurz vorm Generieren der Cachefiles. Das hat den Vorteil, dass das AddOn bereits weiß, wie viele Files zu generieren sind, es kann also vorab durchzählen. Bedeutet, wenn man beispielsweise Medienpool-Kategorien oder Medientypen ausschließt, wird auch der Zähler am Fortschrittsbalken kleiner.

Den EP CACHE_WARMUP_PAGES halte ich für kaum sinnvoll, er ist aber natürlich der Vollständigkeit halber mit drin. Und auch CACHE_WARMUP_MEDIATYPES ist vermutlich nicht allzu praktikabel, zumindest erschließt sich mir kein konkreter Anwendungsfall.

Überaus praktisch ist allerdings CACHE_WARMUP_GENERATE_IMAGE, der hier dringend gewünscht wurde, um zu steuern, welcher Bilder mit welchen Mediatypes generiert werden. Damit kann man beispielsweise komplette Medienpool-Kategorien auslassen oder auch Medientypen, die nicht generiert werden sollen.

Für Pages gibt es einen gleichwertigen EP, aber der ist nun wieder weniger wichtig, weil Pages ratzfatz generiert werden und zudem der Online-Status beachtet wird, so dass typische Hilfsartikel gar nicht erst selektiert werden.

Bin gespannt auf euer Feedback und ob das so auf eure Anforderungen hin taugt. Speziell @tbaddade und @alexplusde hatten sich was in diese Richtung gewünscht.

Falls gemerged wird: closes #86 closes #88

schuer commented 6 years ago

@staabm ist wie immer als Permanent-Reviewer eingeschlossen und bedarf keiner besonderen Erwähnung ;)

gharlan commented 6 years ago

Sieht schon vielversprechend aus. 👍

Ich frage mich allerdings, ob man CACHE_WARMUP_IMAGES und CACHE_WARMUP_MEDIATYPES nicht kombinieren sollte. Oder noch ein zusätzlicher Kombi-EP? Wenn ich ganz konkrete Kombinationen generieren lassen will, ist das mit den getrennten EPs ja nicht so leicht möglich, oder? Vor allem wenn man mit virtuellen MediaTypen (media_srcset-Addon) oder virtuellen Dateinamen (yakme-Addon) arbeitet. Aktuell muss man dann erst über die EPs oben alle möglichen Dateinamen und Typen hinzufügen, und dann über den EP CACHE_WARMUP_GENERATE_IMAGE die Kombis wieder rausfiltern, die man nicht möchte, bzw. die gar nicht funktionieren (weil der Typ diese Art von virtuellen Dateien zum Beispiel gar nicht kann).

Mal weiter gesponnen, wie es mit einem Kombi-EP aussehen könnte:

rex_extension::register('CACHE_WARMUP_<???>', function (rex_extension_point $ep) {
    // vorgeliefert wird ein Array mit der Bildauswahl von cache_warmup, 
    // und jedem Bild werden alle Typen zugeordnet
    // $images = [
    //     'bild1.jpg' => ['type1' => true, 'type2' => true],
    //     'bild2.jpg' => ['type1' => true, 'type2' => true],
    // ];
    $images = $ep->getSubject();

    // Man kann nun Bilder komplett entfernen
    unset($images['foo.jpg']);

    // Oder Typen eines Bilds entfernen
    unset($images['bar.jpg']['type2']);

    // Oder ganze Typen entfernen
    foreach ($images as $image => &$types) {
        unset($types['typeX']);
    }

    // Oder halt vor allem bestimmte Kombis hinzufügen
    $images['bild2.jpg']['mytype'] = true;
    $images['virtual_file']['type1'] = true;

    return $images;
});

Ausschließen ginge auch mit CACHE_WARMUP_GENERATE_IMAGE. Aber eben dieses gezielte Hinzufügen von bestimmten Kombis ist bei deinen aktuellen EPs etwas mühsam, oder?

schuer commented 6 years ago

Danke @gharlan, klingt sinnvoll mit den Kombis! Werde ich mal noch anpassen.

schuer commented 6 years ago

Ich habe euer Feedback umgesetzt und hoffe, es entspricht den Anforderungen. Vor allem im Hinblick auf virtuelle Medientypen und Dateinamen. Schaut am besten mal die README an: https://github.com/FriendsOfREDAXO/cache_warmup/blob/9dfd6a1fb5f24c4f7c33c7eb3fcbafb6e57a0a7e/README.md#extension-points-ep

Und darin vor allem das Codebeispiel für CACHE_WARMUP_IMAGES_WITH_MEDIATYPES: https://github.com/FriendsOfREDAXO/cache_warmup/blob/9dfd6a1fb5f24c4f7c33c7eb3fcbafb6e57a0a7e/README.md#cache_warmup_images_with_mediatypes

Auch die EPs und ihre Benamung könnten wir nochmal durchdiskutieren, falls ihr sie nicht für sinnvoll anseht. Zur Erklärung noch, warum es so viele EPs gibt:

CACHE_WARMUP_IMAGES ermöglicht, Bilder unabhängig von Medientypen hinzuzufügen. Es wird nur die Bilderliste ergänzt, die dann im späteren Verlauf zusammen mit der Liste der Medientypen in ein Array gesteckt wird. CACHE_WARMUP_IMAGES_WITH_MEDIATYPES ermöglicht am Ende, gezielt Kombinationen aus Bildern und Medientypen zu ergänzen, um z. B. responsive Images zu bestücken.

Weil sich gezeigt hat, wie unterschiedlich wir alle im Hinblick auf die Cache-Warmup-Features ticken, fand ich es notwendig, so viele EPs unterzubringen. Manche greifen eher am Anfang, manche am Ende, und zusammen machen sie den Umgang mit Cachefiles es sehr flexibel.

Bin gespannt auf euer Feedback.

schuer commented 6 years ago

Achso, und @gharlan: Du schriebst in deinem Codebeispiel als Kommentar:

// vorgeliefert wird ein Array mit der Bildauswahl von cache_warmup, // und jedem Bild werden alle Typen zugeordnet

Ich habe es jetzt etwas anders gebaut, weil sich die Struktur bereits anbot und ich nicht mehr viel umbauen musste. Hoffe, es passt trotzdem so auf die Anforderungen!

schuer commented 6 years ago

Danke fürs Feedback, @gharlan! Was meinen die anderen zur Notation? Mir sind beide Varianten recht.

bloep commented 6 years ago

Ich schließe mich @gharlan an und würde $images['dave-grohl.jpg']['portrait'] = true; bevorzugen.

schuer commented 6 years ago

Ich will seit langem diesen PR fertig machen und dabei euer Feedback zur Notation einarbeiten, merke aber jedesmal, wenn ich anfange, dass es mir zu viel Aufwand ist, und breche dann direkt wieder ab. Um das Projekt vorwärts zu bringen — es gibt noch einige andere Baustellen, etwa Fehlerreports und Konsolenbedienung —, würde ich die Notation nun lieber erstmal so lassen und den PR mergen. Und vielleicht kümmert sich später nochmal jemand um die Notation, wenn Zeit und Lust ist, okay?

Der Merge soll nicht gegen die Meinungen hier im Thread sprechen, und ich finde Gregors Vorschläge auch sehr sinnvoll, nur möchte ich mit dem AddOn weiterkommen, und dieser PR hält mich seit Wochen auf.