Dočasné zablokování přidávání nových hodnot do Object Cache

Ne vždy je přidávání nových hodnot do Object Cache ve WordPressu žádoucí. Jsou operace generující velké množství cachovatelných dat, které nejsou při dalším zpracování třeba – typicky třeba větší importy dat.

Funkce wp_suspend_cache_addition

V takových případech je k dispozici funkce wp_suspend_cache_addition volaná s argumentem true. Jak funkce funguje je vidět bez zdlouhavého vysvětlování již při pohledu do funkce samotné:

function wp_suspend_cache_addition( $suspend = null ) {
 static $_suspend = false;
 if ( is_bool( $suspend ) )
  $_suspend = $suspend;
 return $_suspend;
}

K uchovávání aktuální hodnoty používá statickou proměnnou $_suspend. Pokud zavoláme funkci s argumentem typu boolean (true či false) je hodnota nově přiřazena statické proměnné a při následném volání bez argumentů je nám vrácena poslední nastavená hodnota (inicializace s hodnotou false probíhá pouze jednou při jejím prvním volání – tomu tak je již z definice statických proměných).

Jen pro jistotu: Použití této funkce, aspoň co se jádra WordPressu týče, nemá za následek znemožnění získávání již uložených hodnot.

Poté, co dokončíte svou operaci během, které jste přidávání nových hodnot do cache zakázali, je vhodné cachování opět povolit:

wp_suspend_cache_addition( true );

Proč blokovat přidávání nových hodnot do Object Cache

Jak již bylo řečeno v úvodu do Object Cache – defaultní implementace Object Cache spoléhá na globální proměnné a tudíž každá další hodnota zvyšuje množství konzumované paměti (PHP memory limit). Zablokujeme-li přidávání nových hodnot například během importu, docílíme toho, že náš skript vydrží běžet déle.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s