Použití asynchronního načítání javascriptu ve WordPressu - Affinite.io CZ

Rychlost načítání webu, kromě jiného, ovlivňuje načítání externích javascriptových souborů. Ty, které jsou vloženy do hlavičky webu, jsou označovány, jako DOM blockers.

To znamená, že pokud prohlížeč, narazí na takový soubor (což se mimo jiné týká i css souborů), nejprve jej načte, čímž se zastaví vykreslování html kódu (DOMu). Až po plném načtení js kódu, pokračuje prohlížeč v načítání.

Možným řešením a také často doporučovaným, je přesun všech js souborů do patičky webu.

Bohužel, toto může mít podobný výsledek:

Snímek obrazovky (35)

Důvodem je, že jQuery je voláno ve chvíli, kdy ještě není k dispozici.

Takže jQuery necháme v hlavičce. Což vám Google Insight vyčte.

Naštěstí je možné načítat javascript asynchronně a to pomocí atributů async a defer.

Jejich nevýhodou je, že async nefunguje v IE 9- a oba v Opeře Mini. Na druhou stranu je jejich využití spíše přínos.

Rozdíl mezi async a defer

Pokud atributy použijete při načítání scriptu:





Odložíte načtení souboru scripts, do doby, než bude potřeba. Například u jQuery do té doby, než bude poprvé voláno.

Rozdíl je v tom, co se stane potom.

U defer se script začne stahovat a načítání DOMu bude pokračovat až do konce. Hned poté, před událostí DOMContentLoaded se provede stažený javascript.

Naproti tomu se u async, začne stahovat soubor a v tu chvíli, kdy je celý stažený, začne se provádět a načítání DOMu se zastaví. Pokračovat bude až po vykonání scriptu.

Osobně bych u WordPressu preferoval async.

Aby jsme mohli asynchronní načítání použít, potřebujeme do každého scriptu v hlavičce vložit atribut async.
Jak toho ale dosáhnout, když js souborů může být pomocí šablon a pluginů vkládáno neomezené množství?

Můžeme si pomoci filtrem clean_url, kde můžeme každou url končící js upravit.

add_filter( 'clean_url', 'wcs_defer_javascripts', 11, 1 );
function wcs_defer_javascripts ( $url ) {
    if ( false === strpos( $url, '.js' ) ) return $url;
    if ( strpos( $url, 'jquery.js' ) ) return $url;
    return "$url' async='async";
}

A k čemu nám to bylo?

Když si otevřeme consoli v Chrome, před tím, než použijeme funkci, načítání eshopu vypadá takto:

Po vložení funkce do souboru functions.php, se doba pro DOMContentLoaded sníží téměř o 40 procent.

Slušný výsledek na tak jednoduchou funkci, ne?

Pokud se chcete o optimalizaci WordPress webů, chcete dozvědět více, můžete přijít na některé ze školení

Online education flat horizontal banners with online lessons and webinar decorative icons vector illustration
Nastavení WordPressu pro AMP - Accelerated Mobile Pages
Nastavení WordPressu pro AMP - Accelerated Mobile Pages
12 Bře, 2016
Vlastní WooCommerce šablony - jak je používat?
Vlastní WooCommerce šablony - jak je používat?
17 Dub, 2016

Komentáře nejsou povoleny.

Looking for something?