web: Stale-while-revalidate-Cache für die öffentlichen Seitendaten
Start-/Kategorieseiten bauten nach Ablauf der 5-Minuten-TTL im Besucher- Request neu (~25-30 Archiv-Queries über ~100k PMs) — Long-Tail-Rubriken waren dadurch praktisch bei jedem Aufruf langsam. WebPageCache nutzt jetzt Cache::flexible([300, 3600]): Innerhalb 5 Min frisch wie bisher, danach wird bis zu 1 h sofort der alte Stand serviert und der Neuaufbau läuft nach der Response (deferred). HomePageData/CategoryPageData/TickerData laufen dafür über die gemeinsame WebPageCache-Konvention (Keys unverändert), die Hub-Kennzahlen über flexible([3600, 14400]). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
parent
5011f28f88
commit
bd4ad855ba
6 changed files with 77 additions and 37 deletions
|
|
@ -8,33 +8,29 @@ use App\Models\Category;
|
|||
use App\Models\Company;
|
||||
use App\Models\PressRelease;
|
||||
use App\Support\EditorialClock;
|
||||
use App\Support\WebPageCache;
|
||||
use Illuminate\Database\Eloquent\Builder;
|
||||
use Illuminate\Support\Carbon;
|
||||
use Illuminate\Support\Facades\Cache;
|
||||
|
||||
/**
|
||||
* Datenaufbereitung der öffentlichen Startseite einer Ausgabe: Lead-/Seiten-/
|
||||
* meistgelesene Meldungen, aktive Newsrooms, Branchen-Index, „Heute im Fokus"
|
||||
* (Spotlight) und Kennzahlen. Der Ad-Hoc-Ticker kommt zentral aus TickerData.
|
||||
*
|
||||
* Das Ergebnis wird kurz gecacht (analog TickerData): Der Aufbau umfasst
|
||||
* ~25 Queries über das gesamte Archiv und die Daten ändern sich höchstens
|
||||
* minütlich — neue Meldungen erscheinen spätestens nach Ablauf der TTL.
|
||||
* Das Ergebnis wird stale-while-revalidate gecacht (WebPageCache): Der Aufbau
|
||||
* umfasst ~25 Queries über das gesamte Archiv und darf nicht im Besucher-
|
||||
* Request laufen — neue Meldungen erscheinen spätestens nach Ablauf der
|
||||
* Frische-TTL beim übernächsten Aufruf.
|
||||
*/
|
||||
class HomePageData
|
||||
{
|
||||
private const CACHE_TTL_SECONDS = 300;
|
||||
|
||||
/**
|
||||
* @return array<string, mixed>
|
||||
*/
|
||||
public function build(Portal $portal, string $language = 'de'): array
|
||||
{
|
||||
$cacheKey = sprintf('web.home.%s.%s', $portal->value, $language);
|
||||
|
||||
return Cache::remember(
|
||||
$cacheKey,
|
||||
self::CACHE_TTL_SECONDS,
|
||||
return WebPageCache::remember(
|
||||
WebPageCache::key('home', [$portal->value, $language]),
|
||||
fn (): array => $this->buildFresh($portal, $language)
|
||||
);
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue