Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

WordCamp Bratislava 2019 - Cache!

757 views

Published on

Různé možnosti cachování ve WordPress - cache v prohlížeči, cachovací pluginy, object cache, OP code cache, cachování lokalizací a další triky.

Published in: Technology
  • Login to see the comments

WordCamp Bratislava 2019 - Cache!

  1. 1. https://lynt.cz @smitka Odkazy: https://u.lynt.cz/wcba19 Cache! To chceš! Vláďa Smitka vladimir.smitka@lynt.cz @smitka Lynt services s.r.o.
  2. 2. https://lynt.cz @smitka Odkazy: https://u.lynt.cz/wcba1912. 10. 2019 2
  3. 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) + -
  4. 4. https://lynt.cz @smitka Odkazy: https://u.lynt.cz/wcba1912. 10. 2019 4 Cachování OP code cache Transientní cache Stránková cache Cache prohlížeče Objektová cache Disková cache Proxy cache
  5. 5. https://lynt.cz @smitka Odkazy: https://u.lynt.cz/wcba19 Cache prohlížeče <IfModule mod_expires.c> <FilesMatch ".(?i:gif|jpe?g|png|js|css|ico|woff|svg)$"> ExpiresActive on ExpiresDefault "access plus 365 days" </Filesmatch> </IfModule> 12. 10. 2019 5
  6. 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. 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
  8. 8. https://lynt.cz @smitka Odkazy: https://u.lynt.cz/wcba19 CloudFlare • Pomůže mi? 12. 10. 2019 8
  9. 9. https://lynt.cz @smitka Odkazy: https://u.lynt.cz/wcba19 Debug problémů se zdroji • https://www.webpagetest.org • https://gtmetrix.com/ • https://redbot.org/ 12. 10. 2019 9
  10. 10. https://lynt.cz @smitka Odkazy: https://u.lynt.cz/wcba19 Plně stránková cache • Cachovací plugin –WP SuperCache –… W3, Comet, Fastest… –WP Rocket 12. 10. 2019 10
  11. 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
  12. 12. https://lynt.cz @smitka Odkazy: https://u.lynt.cz/wcba19 WP Rocket 12. 10. 2019 12
  13. 13. https://lynt.cz @smitka Odkazy: https://u.lynt.cz/wcba19 WP SuperCache 12. 10. 2019 13
  14. 14. https://lynt.cz @smitka Odkazy: https://u.lynt.cz/wcba19 Pod pokličkou WP SuperCache RewriteCond %{REQUEST_METHOD} !POST RewriteCond %{QUERY_STRING} !.*=.* RewriteCond %{HTTP:Cookie} !^.*(comment_author_|wordpress_logged_in|wp-postpass_).*$ RewriteCond %{HTTPS} on RewriteCond %{DOCUMENT_ROOT}/wpc/cache/supercache/%{SERVER_NAME}/$1/index-https.html -f RewriteRule ^(.*) "/wpc/cache/supercache/%{SERVER_NAME}/$1/index-https.html" [L] cache └── supercache ├── index.html └── testweb.xy ├── index-https.html └── wordcamp-bratislava └── index-https.html 12. 10. 2019 14 https://testweb.xy/wordcamp-bratislava/
  15. 15. https://lynt.cz @smitka Odkazy: https://u.lynt.cz/wcba19 Bez cache 12. 10. 2019 15
  16. 16. https://lynt.cz @smitka Odkazy: https://u.lynt.cz/wcba19 WP SuperCache - PHP 12. 10. 2019 16
  17. 17. https://lynt.cz @smitka Odkazy: https://u.lynt.cz/wcba19 WP SuperCache - server 12. 10. 2019 17
  18. 18. https://lynt.cz @smitka Odkazy: https://u.lynt.cz/wcba19 Nginx Microcache 12. 10. 2019 18
  19. 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. 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
  21. 21. https://lynt.cz @smitka Odkazy: https://u.lynt.cz/wcba19 „Na e-shopech cachovací pluginy moc nefungují“ 12. 10. 2019 21
  22. 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. 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
  24. 24. https://lynt.cz @smitka Odkazy: https://u.lynt.cz/wcba19 Serializace 12. 10. 2019 24 a:13:{s:7:"vajicka";i:4;s:15:"krupicovy cukor";s:4:"125g";s:15:"vanilkovy cukor";i:1;s:5:"maslo";s:4:"125g";s:6:"mlieko";s:4:"50ml";s:14:"muka polohruba";s:5:"150g";s:5:"kakao";s:3:"50g";s:16:"prasok do peciva";i:1;s:10:"mascarpone";s:4:"250g";s:18:"slahackova smotana";s:4:"250g";s:12:"jemny tvaroh";s:4:"250g";s:8:"cokolada";s:3:"50g";s:5:"banan";i:3;}
  25. 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. 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. 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
  28. 28. https://lynt.cz @smitka Odkazy: https://u.lynt.cz/wcba1912. 10. 2019 28
  29. 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. 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. 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
  32. 32. https://lynt.cz @smitka Odkazy: https://u.lynt.cz/wcba19 Objektová cache II. • Není to běžné na sdílených hostinzích • Výpočetně náročná serializace • https://github.com/elcobvg/wordpress- opcache 12. 10. 2019 32 cache ├── wp-opcache-001750be6fac24fa5b1d57b91ffd44d7.php ├── wp-opcache-03e1fcb75c96dd27d0c18d7fbc528c2d.php ├── wp-opcache-073d1cde8e952fea0fc9ec449ecef86e.php ├── wp-opcache-089b61a0516793ff0c3f638785900d0a.php │… <?php return array(9999999999,(object) array( 'ID' => '1', 'post_author' => '1', 'post_date' => '2019-08-08 06:19:00', 'post_date_gmt' => '2019-08-08 06:19:00', 'post_content' => '...', 'post_title' => 'Hello world!', … 'post_type' => 'post', 'post_mime_type' => '', 'comment_count' => '1', ));
  33. 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. 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
  35. 35. https://lynt.cz @smitka Odkazy: https://u.lynt.cz/wcba1912. 10. 2019 35 A to je vše, přátelé.

×