3. https://lynt.cz @smitka Odkazy: https://u.lynt.cz/wcba1912. 10. 2019 3
Co je cache?
Výkon – nemusím znova dělat náročné operace
Aktuálnost – musím řešit neplatná data (invalidace)
+
-
6. https://lynt.cz @smitka Odkazy: https://u.lynt.cz/wcba19
Co, když nemám Expires hlavičky?
• Heuristika prohlížeče
• (teď – datum poslední modifikace)/10
• https://tools.ietf.org/html/rfc7234#section-4.2.2
12. 10. 2019 6
7. https://lynt.cz @smitka Odkazy: https://u.lynt.cz/wcba19
Proxy cache
• Na vstupu do vaší sítě
(už se moc nepoužívá kvůli HTTPS)
• Na cestě – např. CloudFlare
• Před serverem – Varnish, Nginx
12. 10. 2019 7
11. https://lynt.cz @smitka Odkazy: https://u.lynt.cz/wcba19
Jak fungují cachovací pluginy?
• Princip – uložit vypočítanou PHP stránku jako
statické HTML na disk (output buffer)
• Přístup:
– Test z .htaccess, zda soubor cache existuje
– Malý PHP skript (větší kontrola, pomalejší)
• Zlepšováky
12. 10. 2019 11
19. https://lynt.cz @smitka Odkazy: https://u.lynt.cz/wcba19
Kdy se necachuje?
• https://2019.bratislava.wordcamp.org/?a=1
• https://2019.bratislava.wordcamp.org/?fbclid=ABCD1234
• https://2019.bratislava.wordcamp.org/?gclid=ABCD1234
• https://2019.bratislava.wordcamp.org/?utm_medium=email
12. 10. 2019 19
Fix: interní přesměrování pro nemodifikující parametry
https://gist.github.com/lynt-smitka/297004bed3aa4fb3065af16fd6e7ff18
WP Rocket má výjimky pro běžné nemodifikující parametry
Parametry často dělají problém při přesměrování, tester:
https://www.ppc-robot.net/cs/autotagging-tester/
20. https://lynt.cz @smitka Odkazy: https://u.lynt.cz/wcba19
Kdy je špatné cachovat?
• Dynamické stránky
– Přihlášení uživatelé (většinou)
– Web s košíkem
– Web s uživatelem nastavitelnými parametry (filtry)
• Formuláře
– Je zde nonce (platnost 12-24 hodin)
– Bezpečná doba cachování 10 hodin
12. 10. 2019 20
22. https://lynt.cz @smitka Odkazy: https://u.lynt.cz/wcba19
Objektová cache
• WP z dat v databázi skládá objekty, se kterými
dále pracuje – náročná operace, mnoho
dotazů do DB
• Některé lze uložit lokálně
127.0.0.1:6379> keys *:1929
1) "wp_:post_tag_relationships:1929"
2) "wp_:category_relationships:1929"
3) "wp_:posts:1929"
4) "wp_:post_format_relationships:1929"
5) "wp_:post_meta:1929"
12. 10. 2019 22
23. https://lynt.cz @smitka Odkazy: https://u.lynt.cz/wcba19
Objektová cache
• Server musí podporovat uložiště
• WordPress má podporu, je ji potřeba aktivovat
podle použitého úložiště
• Drop-in do WP (Memcache, Redis, Xcache, APCu)
• Není to běžné na sdílených hostinzích
• Výpočetně náročná serializace
• Ne všechny pluginy a šablony s ní počítají –
složitější invalidace
12. 10. 2019 23
25. https://lynt.cz @smitka Odkazy: https://u.lynt.cz/wcba19
Redukce DB dotazů
12. 10. 2019 25
Může být kontraproduktivní,
pokud web dělá několik stovek dotazů do DB – náročná serializace!
26. https://lynt.cz @smitka Odkazy: https://u.lynt.cz/wcba19
Transientní cache
• WP v základu může ukládat výsledky mnoha
složitých operací do databáze
• _site_transient_* a _transient_* ve wp-
options
• Pokud je k dispozici objektová cache, může být
využita místo DB
• https://codex.wordpress.org/Transients_API
12. 10. 2019 26
27. https://lynt.cz @smitka Odkazy: https://u.lynt.cz/wcba19
OP cache
• Kompiluje PHP zdroják
• Vyšší verze PHP s ní umí lépe pracovat
• Spotřebovává více RAM
• Běžný WP kolem 20MB
• opcache.memory_consumption
• opcache.revalidate_freq
• https://github.com/rlerdorf/opcache-status (starý, ale dobrý)
• https://github.com/amnuts/opcache-gui
• https://github.com/PeeHaa/OpCacheGUI
12. 10. 2019 27
29. https://lynt.cz @smitka Odkazy: https://u.lynt.cz/wcba19
Disková cache
12. 10. 2019 29
RAM není nikdy dost – Linux ji využije!
30. https://lynt.cz @smitka Odkazy: https://u.lynt.cz/wcba19
Co dále cachovat?
• Cache lokalizací
– https://github.com/lynt-smitka/WP-nginx-
config/blob/master/extras/mu-plugins/
– lynt-mo-cache.php
– lynt-mo-cache-igb.php
• Cache widgetů a menu
12. 10. 2019 30
31. https://lynt.cz @smitka Odkazy: https://u.lynt.cz/wcba1912. 10. 2019 31
Bez OP cache
Zapnutá OP cache (standard, nezaplněná) – méně RAM, protože soubory jsou v OP cache
Cache lokalizací – PHP třídy – ještě méně RAM, protože i lokalizace jsou v OP cache
Cache lokalizací – igbinary – rychlejší, více RAM, protože se načítají binární soubory
Cache lokalizací igb + Object cache v OP cache – méně dotazů bez serializace
33. https://lynt.cz @smitka Odkazy: https://u.lynt.cz/wcba19
Jak ladit bez profileru?
• Query monitor
• https://wordpress.org/plugins/query-monitor/
12. 10. 2019 33
34. https://lynt.cz @smitka Odkazy: https://u.lynt.cz/wcba19
Co si odnést?
• Expires hlavičky – vždy
• CloudFlare – pro větší návštěvnost nebo geo
• Cache lokalizací – dobrý přínos a minimum side efektů
• Prezentační weby/blogy – cachovací plugin (pozor na nonce)
• Pozor na parametry v URL!
• E-shopy – nutné řešit od základu, je třeba zrušit špatné
komponenty, Object Cache může někdy pomoci
• Je dobré zkontrolovat využívání OP Cache
• Při nákupu VPS/Dediku koupit rovnou více RAM
• Query Monitor pro ladění
12. 10. 2019 34