2. Obsah přednášky
● Co je to cache, co cachovat
● Možnosti cachování - PHP a MySQL
o Memcached, Alternative PHP Cache (APC)
o MySQL Query Cache
● Page level a Object Cache
● Jak je WordPress na cache připravený
o Transients API
o WP_Object_Cache a wp_cache funkce
o oEmbed cache
3. Co je to Cache a co cachovat?
● Ukládání dřívě získaných dat, nebo jejich kopie, tak,
aby byly při dalších operacích k dispozici rychleji
● Cachovat lze skoro vše
o celé stránky a objekty
o výsledky dotazů do externí API, náročné výpočty ...
● … a ještě něco navíc
o MySQL Query Cache
o OpCode
4. MySQL Query Cache
● pouze identické a deterministické SELECT
dotazy
● přetvrvává mezi jednotlivými sessions
● smazání relevantních dotazů po změně
tabulky
● nedistribuovaná
5. Cache engines
● Memcached
o distribuovaná (server dostupný přes telnet)
o key - value pairs uložené v paměti serveru
o PECL rozšíření pro PHP (memcached/memcache)
● Alternative PHP Cache (APC)
o Opcode i user cache (PHP <= 5.4), APCu (PHP 5.5)
o nedistribuovaná
● Statický soubor
o např. mod_rewrite (WP Super Cache), CDN
6. Page Level vs. Object Cache
● Page level cache (např. WP Super Cache)
o ukládá pouze celé stránky
o každá stránka se musí vygenerovat celá sama o
sobě se všemi DB, API a dalšími dotazy
o obvykle nefunguje pro přihlášené
● Object cache (APC, Memcached, W3TC)
o znovupoužitelná pro generování více stránek
o funguje i pro přihlášené uživatele
o použitelná také v administraci WordPressu
7. Page Level Cache
● HTML soubory uložené na disku
o načítání pomocí PHP či mod_rewrite (WP Super
Cache)
● memcached (Batcache)
o lze využít i bez použití PHP přímo na serveru
(NginX, Apache ...)
● CDN
o cloudflare (W3TC)
o jakýkoli jiný (WP Super Cache)
10. Object Cache
● cachujeme znovupoužitelné objekty
o znovupoužitelné v rámci jednoho requestu
o a hlavně znovupoužitelné napříč requesty
● objekt tvoří jeden, ale i více SQL dotazů
o je výsledkem mnoha funkcí, metod …
● Například:
o WP_User (capabilities, user_meta)
o WP_Post ...
11. Jak je WP připravený na cachování
● Transients API
o set_transient, get_transient, delete_transient
o set_site_transient, get_site_transient …
● WP_Object_Cache třída a wp_cache funkce
o wp-includes/cache.php
wp_cache_add, wp_cache_set,
wp_cache_replace
wp_cache_get
wp_cache_delete, wp_cache_flush
12. Transients API
● dočasné ukládání cachovaných dat
● defaultně využívá tabulku wp_options
o add_option s parametrem autoload = “no”
pokud nemá expiraci, pak autoload = “yes”
o přidává dva řádky do tabulky
hodnotu transient
maximální expirační čas (nikoli garantovaný)
13. ● v jádře je implementace ukládající data do
globální proměnné
o z podstaty věci, defaultně, jen po dobu session
● má význam například při opakovaném
dotazu do zatabáze
o lze s klidným svědomím opakovaně volat například
get_post_meta bez přetěžování databáze
WP_Object_Cache
14. Kde se WP_Object_Cache používá
● get_metadata (post, user, comment ...)
● get_option (autoload options)
● get_post, get_user, get_comment, get_term
● transients
● ...
15. wp_cache funkce
● wp_cache_set($key, $data, $group, $expire)
o defaultně bez expirace ($expire = 0)
● wp_cache_get( $key, $group )
o group umožnuje používat stejní klíče pro různé
skupiny
16. Externí WP_Object_Cache - dropins
● dropins
o wp-content/advanced-cache.php
o wp-content/object-cache.php
● object-cache.php
o zamezí načtění souboru wp-includes/wp_cache.php
o znovu definuje WP_Object_Cache i wp_cache
funkce
o využívá libovolný externí cachovací engine
memcache, APC, souborvý systém ...
18. WordPress Cachovací Pluginy
● WP Super Cache http://wordpress.org/plugins/wp-super-
cache/
o page level cache využívající mod_rewrite
● W3 Total Cache http://wordpress.org/plugins/w3-total-cache/
o několik object-cache enginů
● Batcache http://wordpress.org/plugins/batcache/
● object-cache.php dropins
http://wordpress.org/plugins/memcached/
http://wordpress.org/plugins/apc/
19. Principy Cachování ve WP - Shrnutí
● Memcached, APC, MySQL Query Cache
● Page level vs. Object Cache
o ideální je mix page level a object cache
● Transients API
● WP_Object_Cache a wp_cache funkce
o dropins: object-cache.php, advanced-cache.php
● Cachování v post_meta tabulce