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
|
|
@ -4,27 +4,25 @@ namespace App\Services\Web;
|
|||
|
||||
use App\Enums\Portal;
|
||||
use App\Models\PressRelease;
|
||||
use Illuminate\Support\Facades\Cache;
|
||||
use App\Support\WebPageCache;
|
||||
use Illuminate\Support\Str;
|
||||
|
||||
/**
|
||||
* Ad-Hoc-Ticker-Meldungen der Web-Frontends: die jüngsten veröffentlichten
|
||||
* Pressemitteilungen des Portals. Zentral hier statt je Seite, damit der
|
||||
* Ticker auf allen Unterseiten identisch gefüllt ist; kurz gecacht, weil
|
||||
* der Header auf jeder Seite rendert.
|
||||
* Ticker auf allen Unterseiten identisch gefüllt ist; stale-while-revalidate
|
||||
* gecacht (WebPageCache), weil der Header auf jeder Seite rendert.
|
||||
*/
|
||||
class TickerData
|
||||
{
|
||||
private const CACHE_TTL_SECONDS = 300;
|
||||
|
||||
/**
|
||||
* @return list<array{time: string, text: string, href: ?string}>
|
||||
*/
|
||||
public function items(Portal $portal, string $language): array
|
||||
{
|
||||
$cacheKey = sprintf('web.ticker.%s.%s', $portal->value, $language);
|
||||
$cacheKey = WebPageCache::key('ticker', [$portal->value, $language]);
|
||||
|
||||
return Cache::remember($cacheKey, self::CACHE_TTL_SECONDS, function () use ($portal, $language): array {
|
||||
return WebPageCache::remember($cacheKey, function () use ($portal, $language): array {
|
||||
return PressRelease::query()
|
||||
->forPortalValues([$portal->value, Portal::Both->value])
|
||||
->forLanguage($language)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue