TEST: vyplatí se zakázat Main Query?
Takže, chystáte se optimalizovat svůj WordPress web a narazili jste na otázku: „Mám zakázat Main Query?“ Není to zrovna nejběžnější téma, ale když se s ním setkáte, dává smysl se mu věnovat.
Já osobně na svých webech používám vlastní dotazy pomocí new WP_Query($args)
pro získávání příspěvků. To mi umožňuje vlastní stránkování a filtrování. Jenže, co se děje? Proběhne i ten „defaultní“ Main Query a pak teprve můj dotaz. Takže, co když ten první dotaz prostě „vyhodíme“?
Hokus pokus:
Provedl jsem pár testů na jednoduchém webu a zjistil jsem, že Main Query trval cca 0,0001 až 0,0002 vteřiny, stejně tak jako můj modifikovaný dotaz. To je opravdu krátká doba, ale podle pluginu Query Monitor se celkový počet dotazů snížil o 3-4. Není to žádná revoluce, ale i tak je to zlepšení.
Jak na to?
Kód, který jsem použil, vypadá takto:
/**
* Funkce zabraňuje spuštění hlavního dotazu na stránce s výpisem příspěvků.
*
* @param array $posts Pole příspěvků vrácené dotazem.
* @param WP_Query $query Objekt dotazu WordPress.
* @return array Upravené pole příspěvků (prázdné, pokud se jedná o hlavní dotaz na domovské stránce).
*
* Pokud se jedná o hlavní dotaz na domovské stránce a uživatel není v administraci, přidá filtr, který nastaví, že stránka byla nalezena (pre_handle_404) a vrátí prázdné pole příspěvků.
*/
function prevent_main_query_from_running($posts, WP_Query $query)
{
if ($query->is_main_query() && $query->is_home() && !is_admin()) {
add_filter('pre_handle_404', function ($bool, WP_Query $query) {
return true;
}, 10, 2);
return [];
}
return $posts;
}
add_filter('posts_pre_query', 'prevent_main_query_from_running', 10, 2);
Závěr:
Zakázat Main Query může být užitečné, pokud se snažíte o maximální optimalizaci vašeho webu. Většinou se ale jedná o drobné zlepšení, které nemusí být pro běžné weby nutné. Pokud máte složitý web s mnoha dotazy, může vám tato úprava pomoci.
Zdroj: WebDev Dave