Admin-ajax.php zpomaluje stránky

Soubor admin-ajax.php, je součástí administrace a používá jej například Heartbeat API. Díky snadnosti jeho použití, jej často využívají pluginy, které jej volají na frontendu. A to třeba i WooCommerce.

Bohužel, snadnost, s jakou se dá tento soubor použít, pro práci s Ajaxem, láká tvůrce pluginů, aby jej nadužívali.
Když jsem pátral, po tom, proč je Musilda.cz tak pomalý, použil jsem test rychlost načítání, na http://www.webpagetest.org/.

Při výpisu testu, máte k dispozici dva výsledky, jeden pro první načtení a druhý, pro opakované načtení. Tento screen je z opakovaného načtení, kde je krásně vidět, že admin-ajax.php, je velkou brzdou načítání. Při opakovaném načtení, jsou statické soubory již nacacheovány, takže se ve výpise nezobrazují.

Abych zjistil, kde může být problém, využil jsem další test rychlosti, tentokrát https://gtmetrix.com/ a výsledek byl stejný.

Jak je vidět, stejný výsledek. Protože mám ověřeno ze dvou zdrojů, že admin-ajax.php brzdí web, budu muset zjistit, co jej tolikrát za sebou volá.

Nevím, zda to je dobře vidět na screenu, ale po rozkliknutí položky, se zobrazí záložky a na záložce Post, je vidět, jaká akce je volaná. V tomto případě mom_post_views. A protože se jedná o Ajax, WordPress má dva hooky, pomocí který můžete zavěšovat funkce, pro zpracování Ajax volání.

Takže jsem věděl, že musím hledat wp_ajax_mom_post_views a wp_ajax_nopriv_mom_post_views. Název hooků se skládá z předpony a názvu samotné akce. Takže pokud je volaná akce mom_post_views, bude hledaný hook wp_ajax_ + mom_post_views.

Protože je však ajax.admin.php primárně určen pro administraci, musím hledat ještě wp_ajax_nopriv_ + mom_post_views. To proto, že tento hook, umožní přístup k volání i pro nepřihlášené návštěvníky.

V jenom souboru jsem našel:

add_action( ‚wp_ajax_mom_post_views‘, ‚getPostViews‘ );
add_action( ‚wp_ajax_nopriv_mom_post_views‘, ‚getPostViews‘);

z čehož vyplývalo, že problémem je zobrazování počtu shlédnutí, které, z nějakého důvodu, volá šablona pomocí Ajaxu.

Což na hlavní straně je minimálně 18x. Náprava už byla jednoduchá, odstranil jsem z js funkci, která výužívala Ajax, v souboru šablony jsem našel místo, kde se získaná data zobrazovala a nahradil jsem tu část, pomocí get_post_meta.

Výsledek už je daleko lepší:

Když řeknu, že jsem zrychlil web o 2 vteřiny, nebude to tak znít, jako když napíšu:

Úpravou jedné funkce, jsem zrychlil web o 40%

About The Author

Zajímá mne Wordpress, responsivní šablony a zkrátka vše kolem tohoto skvělého redakčního systému.

Související články

8 Comments

  1. drago

    Zdravím, myslím že tu ještě něco zlobí.
    http://tools.pingdom.com/fpt/#!/cx3dw4/http://musilda.cz/admin-ajax-php-zpomaluje-stranky/
    5,9 MB, 822 requestu (spousta přesměrování)
    Taky si dej pozor na tu reklamu na začátku, porušuje pravidla AdSense (reklamu musí být od obsahu alespoň pár px).
    V každém případě díky za článek s Admin-ajax.php jsem bojoval na jednom webu a nakonec to musel vyřešit zablokováním přístupu :/ Teď vím co hledat v zdrojovém kódu.

    Odpověď
    1. Petr

      Řekl bych, že se právě teď stránky upravují. Před chvílí tu byla i základní šablona WP. Tak že proto to zpoždění ;) .

      Odpověď
    2. Musilda

      Reklama je přilepená od dnešního rána, co jsem aktualizoval šablonu. Uvažuji o tom že ji přepracuji, protože není zrovna rychlá.

      Odpověď
      1. Petr

        Nejen, že není rychlá, ale i docela blbne. Třeba nefungovalo stránkování na úvodní stránce. Já osobně, bych vytvořil nějakou šablonu na základní šabloně WordPressu a tu upravil ke svým potřebám. Také by jsi díky tomu mohl využít již nových funkcí z WP 4.4 .
        Podle mě, je to tady moc přeplácaný a ta reklama na začátku článku je jako pěst na oko. Dost zúží začátek článku, což je škoda. Reklamu bych dal někam doprostřed ;) .

        Odpověď
  2. Petr

    Někdy je to prasárna, co někdo dokáže napsat za kód.
    Proto je lepší využívat co nejméně pluginů a opravdu si několikrát rozmyslet, zdali danou funkci potřebuji. Pak také, když funkci potřebuji, zdali nejde získat nějak lépe a efektivněji.

    Odpověď
  3. Vojta

    Díky za návod. Taky musím tento problém odstranit, protože mi dost zpomaluje načítání.
    PS: Nemáte nějakou náhradu za Jetpack, který používám jenom ke sdílení článků na sociálních sítích a ke zobrazení „share“ tlačítek? Dost to totiž taky brzdí…

    V.

    Odpověď

Přidejte komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *