@harrasteblogi JUURI NYT
--:--

Tilaa uutiskirje

Saat tuoreimmat 10 uusinta artikkelia kerran viikossa sähköpostiisi.

Tilaa uutiskirje

admin-ajax.php on yksi WordPressin yleisimmistä suorituskyvyn pullonkauloista. Se toimii kyllä “kaiken ratkaisuna” frontendin ja backendin välillä, mutta korkealla liikenteellä siitä tulee helposti hidas, raskas ja vaikeasti skaalautuva bottleneck.

Tiivistelmä
1. Korvaa admin-ajax REST API:lla

Tämä on tärkein muutos....

3. Cachetus AJAX-vastauksiin

admin-ajax on usein täysin cacheton....

4. Debounce frontendissä

Usein ongelma ei ole backend vaan liialliset requestit....

5. Älä käytä AJAXia kaikkeen

Tyypilliset väärinkäytöt:...

7. Optimoi WordPress boot AJAXissa

admin-ajax lataa kaiken → mutta voit keventää:...

9. Limit AJAX endpoint access

Ilman rajoituksia:...

11. Käytä object cachea (Redis)

admin-ajax hyötyy paljon:...

12. Batch endpointit

Yksi tehokkaimmista optimoinneista:...

15. Yleisimmät virheet

Skaalautuva malli:...

16. Paras arkkitehtuuri

Skaalautuva malli:...

Yhteenveto

admin-ajax.php ei ole itsessään huono, mutta sen käyttömalli WordPressissä on usein syy suorituskykyongelmiin. Kun AJAX-kutsut minimoidaan, siirretään REST API:in, cachetetaan oikein ja raskaat operaatiot viedään...

Ongelma ei ole itse endpointissa, vaan tavassa, jolla sitä käytetään.

Miksi admin-ajax.php kuormittaa sivustoa

Jokainen AJAX-kutsu:

  • käynnistää täyden WordPress-bootin
  • lataa pluginit ja teeman
  • ajaa init-hookit
  • usein tekee DB-queryjä
  • ei oletuksena ole cachettuva

Jos sivu tekee 10 AJAX-kutsua → 10 täyttä WP-käynnistystä.

1. Korvaa admin-ajax REST API:lla

Tämä on tärkein muutos.

admin-ajax (vanha tapa)

add_action('wp_ajax_get_data', 'get_data');
add_action('wp_ajax_nopriv_get_data', 'get_data');

REST API (parempi)

register_rest_route('myplugin/v1', '/data', [
    'methods' => 'GET',
    'callback' => 'get_data',
    'permission_callback' => '__return_true'
]);

Hyödyt:

  • kevyempi routing
  • parempi cache-mahdollisuus
  • selkeämpi arkkitehtuuri
  • helpompi skaalata

2. Vähennä AJAX-kutsujen määrää

Huono:

  • 15 erillistä requestia sivun latauksessa

Parempi:

  • 1 batch request

Esimerkki:

{
  "user": {...},
  "posts": [...],
  "settings": {...}
}

Yksi endpoint → useita dataelementtejä.

3. Cachetus AJAX-vastauksiin

admin-ajax on usein täysin cacheton.

Lisää transient- tai object cache:

$key = 'ajax_data_' . md5(json_encode($_GET));

$data = get_transient($key);

if (!$data) {

    $data = heavy_query();

    set_transient($key, $data, 300);
}

return $data;

Redis tekee tästä erittäin tehokkaan.

4. Debounce frontendissä

Usein ongelma ei ole backend vaan liialliset requestit.

Huono:

  • request jokaisella keypressillä

Parempi:

let timeout;

input.addEventListener('input', () => {

    clearTimeout(timeout);

    timeout = setTimeout(() => {

        fetch('/wp-json/...');

    }, 300);
});

5. Älä käytä AJAXia kaikkeen

Tyypilliset väärinkäytöt:

  • slider data
  • menu renderöinti
  • static content
  • layout data

Nämä pitäisi:

  • renderöidä serverillä
  • tai cachettaa page cacheen

6. Siirrä raskas logiikka backgroundiin

Huono:

AJAX → query → API → processing → response

Parempi:

  • AJAX → job queue
  • worker käsittelee
  • frontend pollaa tai saa valmiin datan

7. Optimoi WordPress boot AJAXissa

admin-ajax lataa kaiken → mutta voit keventää:

add_filter('wp_loaded', function() {

    if (defined('DOING_AJAX')) {
        // disable heavy features
    }
});

Tai:

  • poista turhat hookit AJAX-kontekstissa
  • disable emoji, embeds, jne

8. Käytä wp_send_json_kevyesti

Huono:

echo json_encode($data);
die();

Parempi:

wp_send_json($data);

9. Limit AJAX endpoint access

Ilman rajoituksia:

  • botti voi floodata admin-ajax.php

Lisää:

  • rate limiting
  • nonce
  • capability checks
check_ajax_referer('my_nonce', 'nonce');

10. Vältä WP_Query heavy AJAXissa

Huono:

new WP_Query([...5000 posts...]);

Parempi:

  • pagination
  • limited fields
  • cached query results

11. Käytä object cachea (Redis)

admin-ajax hyötyy paljon:

  • query cache
  • transient cache
  • computed data

Ilman Redisia jokainen AJAX voi osua DB:hen.

12. Batch endpointit

Yksi tehokkaimmista optimoinneista:

Sen sijaan:

  • /get-user
  • /get-posts
  • /get-settings

Käytä:

  • /bootstrap-data

13. Erota public vs admin AJAX

Älä sekoita:

  • wp_ajax_ (logged in)
  • wp_ajax_nopriv_ (public)

Public endpointit ovat erityisen alttiita kuormalle.

14. CDN ja edge-cache vähentää AJAX-tarvetta

Jos sivu on hyvin cachettu:

  • AJAX tarve vähenee merkittävästi
  • data voidaan renderöidä valmiiksi

15. Yleisimmät virheet

  • AJAX käytetään frontend-renderöintiin
  • ei cachea ollenkaan
  • liian monta requestia per sivu
  • raskaat WP_Queryt AJAXissa
  • ei rate limitingia
  • admin-ajax valittu REST API:n sijaan

16. Paras arkkitehtuuri

Skaalautuva malli:

  • REST API admin-ajaxin sijaan
  • batch endpointit
  • Redis cache
  • debounced frontend
  • background processing raskaille operaatioille
  • page cache + CDN vähentää AJAX-tarvetta

Yhteenveto

admin-ajax.php ei ole itsessään huono, mutta sen käyttömalli WordPressissä on usein syy suorituskykyongelmiin. Kun AJAX-kutsut minimoidaan, siirretään REST API:in, cachetetaan oikein ja raskaat operaatiot viedään taustalle, kuormitus laskee merkittävästi ja koko sivusto muuttuu skaalautuvammaksi.

🍪