Co je BFCache a jak funguje
Back/Forward Cache (bfcache) je pokročilá funkce moderních webových prohlížečů, která dramaticky zrychluje navigaci mezi stránkami. Na rozdíl od tradiční HTTP cache, která ukládá pouze odpovědi na předchozí požadavky, bfcache uchovává kompletní snímek celé stránky v paměti.
Princip fungování
Když uživatel opustí stránku, prohlížeč neuvolní její zdroje, ale místo toho:
- Pozastaví veškerý běžící JavaScript kód
- Uloží celý stav stránky včetně DOM a JavaScript heap
- Zachová všechny interaktivní prvky a jejich aktuální stav
Při návratu na stránku pomocí tlačítek zpět/vpřed prohlížeč jednoduše obnoví uložený snímek – žádné síťové požadavky, žádné znovu načítání, žádné opětovné spouštění skriptů.
Uživatelský zážitek
BFCache přináší výrazné zlepšení uživatelské zkušenosti:
Rychlost: Navigace je prakticky okamžitá – srovnatelná s přepínáním mezi otevřenými záložkami prohlížeče.
Zachování stavu: Všechny formuláře, pozice scrollování a JavaScript stavy zůstávají zachovány. Uživatel se vrací přesně tam, kde skončil.
Úspora dat: Eliminuje zbytečné síťové požadavky, což je zejména důležité na mobilních zařízeních s omezeným datovým tarifem.
Podle statistik Chrome představují navigace zpět/vpřed až 10% všech navigací na desktopu a 20% na mobilních zařízeních. S aktivním bfcache by se mohly eliminovat miliardy zbytečných požadavků denně.
Podpora v prohlížečích
Současná podpora
BFCache je podporován ve všech hlavních moderních prohlížečích:
- Chrome/Chromium – plná podpora
- Firefox – plná podpora
- Safari – plná podpora
- Edge – plná podpora (na bázi Chromium)
Na rozdíl od novějších technologií jako Speculation Rules API (podporováno pouze v Chromium), má bfcache širokou podporu napříč všemi prohlížeči.
Co se stane bez podpory
Pokud prohlížeč nepodporuje bfcache (velmi vzácné u moderních prohlížečů), navigace zpět/vpřed se chová tradičním způsobem:
- Stránka se znovu načte ze serveru
- Všechny skripty se spustí znovu
- Formuláře a stavy se resetují
- Uživatel zažije standardní doba načítání
WordPress a problém s no-store
Výchozí chování WordPressu
WordPress ve výchozím nastavení blokuje bfcache pro přihlášené uživatele odesíláním HTTP hlavičky:
Cache-Control: no-cache, no-store, must-revalidate, private
Direktiva no-store
explicitně zakazuje ukládání stránky do jakékoliv cache, včetně bfcache.
Důvody bezpečnostního opatření
Toto omezení bylo zavedeno kvůli ochraně soukromí v následujícím scénáři:
- Administrátor se přihlásí na sdíleném počítači
- Pracuje s citlivými daty (API klíče, uživatelské údaje)
- Odhlásí se z WordPressu
- Jiný uživatel přistoupí k počítači
- Stiskne tlačítko zpět a zobrazí citlivá data z cache
Dopad na výkon
Toto bezpečnostní opatření má významný negativní dopad na výkon:
- Každá navigace zpět/vpřed vyžaduje nové načtení ze serveru
- Ztráta stavu formulářů a JavaScript aplikací
- Pomalá navigace zejména ve WordPress administraci
- Frustrující zážitek na pomalých připojeních nebo sdílených hostinzích
Plugin No-cache BFCache: Řešení problému
Jak plugin funguje
Plugin No-cache BFCache elegantně řeší konflikt mezi bezpečností a výkonem pomocí několika mechanismů:
1. Podmíněné odstranění no-store
Plugin odstraní direktivu no-store
z HTTP hlaviček, ale pouze za těchto podmínek:
- Uživatel má zapnutý JavaScript
- Při přihlášení zaškrtl „Remember Me“
- Zachovává
private
direktivu pro ochranu před proxy cache
2. Session token systém
Při přihlášení:
- Vygeneruje se náhodný „bfcache session token“
- Token se uloží jako cookie
wordpress_bfcache_session_{COOKIEHASH}
- Cookie není HTTP-only, takže ji může číst JavaScript
Na každé autentizované stránce:
- Token je vložen do HTML kódu
- JavaScript skript porovnává token v HTML s aktuálním tokenem v cookie
3. Automatická invalidace
Při návratu na stránku z cache:
- Skript zkontroluje shodu tokenů
- Pokud se neshodují (uživatel se odhlásil), stránka se vymaže a znovu načte
- Používá
pageshow
event pro bfcache a běžné načítání pro HTTP cache
Proč plugin použít
Dramatické zrychlení navigace:
- Okamžitá navigace ve WordPress administraci
- Rychlejší procházení webu pro přihlášené uživatele
- Zachování stavu formulářů a JavaScript aplikací
Lepší uživatelská zkušenost:
- Eliminace ztráty dat při navigaci
- Plynulejší workflow při správě obsahu
- Zvýšení produktivity administrátorů
Technické výhody:
- Snížení zatížení serveru
- Úspora šířky pásma
- Zlepšení Core Web Vitals metriky
Bezpečnostní aspekty
Zůstávající rizika
I přes pokročilé zabezpečení pluginu existují teoretická rizika:
Časové okno zranitelnosti:
- Krátký časový úsek mezi odhlášením a kontrolou tokenu
- Riziko platí pouze na sdílených počítačích
- Útočník musí jednat velmi rychle (sekundy)
Závislost na JavaScriptu:
- Pokud je JavaScript zakázán po přihlášení, invalidace nefunguje
- Plugin toto řeší zachováním
no-store
pro uživatele bez JS
Bezpečnostní opatření pluginu
Vícenásobná ochrana:
- Session token validace
- Opt-in přes „Remember Me“ checkbox
- Zachování
private
direktivy - Dodatečné cache-control direktivy (
no-cache
,max-age=0
,must-revalidate
)
Uživatelské rozhodnutí:
- Sparkle emoji (✨) u „Remember Me“ upozorňuje na funkci
- Uživatel aktivně vybírá mezi rychlostí a maximální bezpečností
- Možnost globálního vypnutí opt-in mechanismu
Výhody použití pluginu
Výkonnostní přínosy
Měřitelné zlepšení:
- Navigace z několika sekund na milisekundy
- Eliminace 100% síťového provozu pro cached stránky
- Nulové zatížení CPU při obnovení ze cache
Širší dopad:
- Zlepšení hodnocení rychlosti webu
- Pozitivní vliv na SEO metriky
- Lepší uživatelské hodnocení webu
Praktické výhody
Pro administrátory:
- Rychlejší správa obsahu
- Zachování rozpracovaných formulářů
- Plynulejší workflow
Pro koncové uživatele:
- Rychlejší navigace na členských webech
- Lepší zkušenost v e-shopech (WooCommerce)
- Zachování stavu nákupních košíků
Kompatibilita
Plugin je navržen jako příprava pro začlenění do WordPress core a je kompatibilní s:
- Všemi moderními prohlížeči
- Existujícími plugin a tématy
- Různými hosting prostředími
Závěr
Plugin No-cache BFCache představuje významný krok vpřed v optimalizaci výkonu WordPressu. Elegantně řeší dlouhodobý konflikt mezi bezpečností a rychlostí, přičemž poskytuje uživatelům volbu mezi maximální ochranou a optimálním výkonem.
Pro většinu WordPress webů představuje aktivace tohoto pluginu výrazné zlepšení uživatelské zkušenosti s minimálními bezpečnostními riziky. Zejména pro weby s autentizovanými uživateli, e-commerce a členské stránky může přinést dramatické zrychlení navigace.
Vzhledem k plánovanému začlenění do WordPress core je plugin také investicí do budoucnosti – připravuje web na modernější a rychlejší standardy webové navigace.