Der Livewire-Feed lief auf jeder Startseiten-Impression ungecacht; seine
ORDER-BY-published_at-Query kann wegen portal IN (…) keinen bestehenden
Index zur Sortierung nutzen und filesortete ~10-20k Zeilen (live gemessen
2,3 s pro Aufruf — die Startseite blieb dadurch trotz Seitendaten-Cache
bei 6-9 s TTFB). Zwei Maßnahmen:
- Neuer Index (language, status, deleted_at, published_at): Backward
Index Scan statt Filesort, Query 2 ms statt 2,3 s — greift auch für
ungecachte Livewire-Interaktionen (Zeitraum-Filter, tiefe Seiten).
- Feed-Seiten 1-3 laufen über WebPageCache (SWR wie die übrigen
Seitendaten); gecacht werden nur items + total, der Paginator wird pro
Request neu gebaut (keine Host-URLs des Cache-Erzeugers im Cache).
Unbekannte timeframe-Werte aus der URL fallen auf 'all' zurück und
erreichen weder Query noch Cache-Key. Der doppelte Gesamt-COUNT pro
Request entfällt; der 'Mehr laden'-Zähler nutzt jetzt den gefilterten
Total des Paginators.
Lokal mit Live-Datenbestand: Startseite kalt 875 ms (vorher 2,5 s),
warm 11 ms (vorher 72 ms).
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>