LW IT Solutions logo LW IT Solutions logo LW IT Solutions
« Przegląd bloga /Wtyczki i triki WordPress/Tutorials / Autoload w WordPressie: wartości kolumny autoload i...
Ten artykuł w innych językach:

Autoload w WordPressie: wartości kolumny autoload i zapytanie, które nadal je znajduje

Autoload w WordPressie: wartości kolumny autoload i zapytanie, które nadal je znajduje
Spis treści
  1. Co autoload naprawdę robi
  2. Trzy wartości w kolumnie, cztery liczą się jako ładowane
  3. Dlaczego stare zapytanie nic nie znajduje
  4. Nierozstrzygnięte znaczy ładowane
  5. Granica przy 150 000 bajtów
  6. Ile naprawdę kosztuje 155 opcji
  7. Pytania i odpowiedzi
  8. Źródła

Każda strona tego bloga zaczyna się od tego samego zapytania do bazy, wysłanego zanim WordPress w ogóle wie, o którą stronę chodziło: czyta zestaw ustawień, których spodziewa się potrzebować.

O tym, które ustawienia należą do tego zestawu, rozstrzyga jedna kolumna o nazwie autoload. Kolumna ta dostała w ostatnich wersjach nowe wartości, a zapytanie polecane przez niemal każdy starszy poradnik nie zwraca dziś nic.

Dwie grupy wartości kolumny autoload - cztery ładowane przy każdym wywołaniu, trzy nieładowane - wraz ze zmierzonym udziałem w ładowanych bajtach
Możliwych jest siedem wartości. Cztery z nich znaczą: opcja jest czytana przed każdą stroną.

Co autoload naprawdę robi

WordPress trzyma swoje ustawienia w jednej tabeli. Każdy wiersz niesie nazwę, wartość i adnotację, czy wartość ma przyjść automatycznie.

Oznaczenie pozwala ograniczyć liczbę zapytań do bazy danych. Zamiast pobierać każde ustawienie osobno, gdy jest potrzebne, WordPress ładuje razem wszystkie wartości oznaczone do automatycznego ładowania i przechowuje je w pamięci do końca żądania.

Ta zamiana ma swoją cenę. To, co nosi oznaczenie, podróżuje przy każdym pojedynczym wywołaniu – na stronach, które nigdy go nie dotykają, przy plikach wydawanych przez PHP, przy każdej wizycie każdego crawlera.

Trzy wartości w kolumnie, cztery liczą się jako ładowane

Dawniej kolumna była prosta. Stało w niej yes albo no i znaczenie obu było jednoznaczne. Od wersji 6.6 możliwości jest więcej.

on i off to odpowiedzi wyraźne: coś zażądało, żeby wartość była ładowana, albo zażądało, żeby nie była.

auto-on i auto-off znaczą: nikt nie pytał, a WordPress rozstrzygnął.

auto znaczy: nikt nie pytał i WordPress też nie rozstrzygnął.

Które wartości liczą się jako ładowane, stoi w kodzie źródłowym jako funkcja wp_autoload_values_to_autoload() i wymienia ona cztery: yes, on, auto-on i auto. Reszta zostaje na dysku, dopóki coś nie zażąda jej po nazwie.

Dlaczego stare zapytanie nic nie znajduje

Linijka, która pojawia się w poradniku za poradnikiem, brzmi SELECT option_name FROM wp_options WHERE autoload = 'yes'.

Zastosowana do tej strony zwraca zero wierszy przy 1290 opcjach – podczas gdy 155 z tych opcji jest faktycznie czytanych przed każdą stroną. Kolumna prowadzi tutaj wyłącznie off, on i auto. Wartość yes nie występuje nigdzie.

Nic o tym nie ostrzega. Nie ma błędu ani komunikatu, a pusty wynik wygląda dokładnie tak samo jak czysta diagnoza. Sprawdzana w ten sposób strona przez lata sprawia wrażenie, jakby w ogóle nie miała ładowanych opcji.

Zapytanie, które nadal działa, wymienia wszystkie cztery wartości: WHERE autoload IN ('yes','on','auto-on','auto').

Długa szyna z wieloma małymi jednakowymi blokami i trzema znacznie większymi pośrodku, pod którymi szyna wyraźnie się ugina

Nierozstrzygnięte znaczy ładowane

Wartość auto jest tą zaskakującą. Zapisuje, że żadna decyzja nie zapadła – a opcja w tym stanie i tak zostaje załadowana.

Droga przez kod jest krótka. Wyraźne true, on albo yes staje się on. Wyraźne false, off albo no staje się off. Tam, gdzie nie podano nic wyraźnego, głos dostaje filtr: true staje się auto-on, false auto-off, a brak odpowiedzi auto.

Ponieważ auto stoi na liście ładowanych, milczenie ma kierunek. Opcja założona bez słowa o autoload jest od tej chwili czytana przed każdą stroną. Na tej stronie w dokładnie takim stanie znajduje się 55 opcji.

Granica przy 150 000 bajtów

Jeden filtr przychodzi razem z WordPressem i nie robi nic poza pilnowaniem rozmiaru. Jeśli wartość po serializacji przekracza 150 000 bajtów, odpowiedź brzmi auto-off, a opcja zostaje na miejscu.

Dwa szczegóły warto zapamiętać. Granica sama jest filtrem, wp_max_autoloaded_option_size, więc wtyczka może ją przesunąć. I działa tylko tam, gdzie nie powiedziano nic wyraźnego – opcja ustawiona ręcznie na on zostaje załadowana bez względu na rozmiar.

W liczbach tej strony reguła jest dobrze widoczna. Żadna ładowana opcja nie przekracza tutaj 150 000 bajtów, podczas gdy największa opcja całej tabeli – zapisany rozmiar katalogu o wielkości 102 403 bajtów – stoi na off i nigdy nie podróżuje.

Ile naprawdę kosztuje 155 opcji

Zmierzone 2 września 2026: 155 z 1290 opcji jest czytanych przed każdą stroną, razem 122 435 bajtów, niecałe 120 KB.

Ważniejszy od sumy jest rozkład. 145 ze 155 jest mniejszych niż kilobajt. Trzy niosą razem 88 946 bajtów, czyli prawie trzy czwarte całego ciężaru.

Zdecydowanie największa jest cron z 49 606 bajtami: 40 procent wszystkiego, co ładowane, w jednym wierszu. Mieści 338 zaplanowanych zdarzeń, a 321 z nich jest jednego rodzaju – po jednym publish_future_post dla każdego wpisu, który wciąż czeka na swój termin.

To nie jest usterka i żadna wtyczka nie ponosi za to winy. Właśnie po to ta opcja istnieje. Znaczy to jednak, że blog z długim planem redakcyjnym czyta cały swój plan, zanim w ogóle wyda jakąkolwiek stronę – i że ten ciężar rośnie wraz z kalendarzem, a nie z ruchem. Dobrze o tym wiedzieć, zanim poszukiwania winnego zaczną się w zupełnie innym miejscu.

Pytania i odpowiedzi

Czy trwała pamięć podręczna obiektów zmienia koszt ładowanych opcji?

Oszczędza zapytanie do bazy, nie ciężar. Przy pamięci podręcznej obiektów, takiej jak Redis czy Memcached, WordPress odkłada tam cały zestaw ładowanych opcji i przy każdym wywołaniu pobiera go z powrotem w jednym kawałku, zamiast pytać tabelę. W pamięci PHP ląduje potem to samo co bez pamięci podręcznej, na tej stronie nadal 122 435 bajtów na wywołanie, a cały zestaw zostaje wczytany, zanim powstanie pierwsza linijka strony.

Na uwagę zasługuje jeden skutek uboczny: zestaw leży w pamięci podręcznej jako pojedynczy wpis. Gdy rośnie, rośnie razem z nim ten wpis, a Memcached w ustawieniu domyślnym nie przyjmuje elementów większych niż 1 MB. Przy niecałych 120 KB ta strona jest daleko od tej granicy; blog, którego opcja cron rośnie razem z planem redakcyjnym, powinien jednak mieć sumę na oku.

Czy da się zmniejszyć opcję cron, nie narażając zaplanowanych wpisów?

Tylko w niewielkim stopniu. 321 zdarzeń publish_future_post to nie pozostałości, lecz polecenia opublikowania czekających wpisów w ich terminach. Bez takiego zdarzenia wpis pozostaje w statusie future, nawet gdy jego termin dawno minął. Na jedno zdarzenie przypada średnio niecałe 147 bajtów (49 606 bajtów na 338 zdarzeń), więc każdy kolejny zaplanowany wpis powiększa opcję mniej więcej o tyle, a każda publikacja znów to odejmuje.

Porządki mają sens wśród pozostałych 17 zdarzeń. Bywają wśród nich cykliczne zadania wtyczek usuniętych dawno temu, bo wtyczka musi sama wyrejestrować swoje zdarzenia przy usuwaniu, a nie każda to robi. Nawet gdyby wszystkie 17 okazały się zbędne, przy przeciętnym rozmiarze dałoby to zaledwie około 2,5 KB.

Nic się przy tym nie zmienia, gdy WP-Cron jest uruchamiany przez systemowe zadanie cron. Zmienia się tylko to, kto wywołuje zdarzenia, na które przyszła pora; lista nadal jest zapisana w tej samej opcji i ładowana przed każdą stroną.

Czy WordPress przestawia opcje dezaktywowanej wtyczki na off?

Nie. Dezaktywacja nie rusza tabeli, a opcje znikają dopiero wtedy, gdy wtyczka sama posprząta po sobie przy odinstalowaniu, więc opcja założona bez podania wartości autoload jest czytana przed każdą stroną także po usunięciu wtyczki. Wśród 55 opcji w stanie auto o tym, do której wtyczki należy dany wiersz, zwykle mówią przedrostki nazw.

Lukas Wójcik

Lukas Wójcik

Systems architect and technology enthusiast specializing in scalable tracking solutions, GMP Stack (GA4 & GTM), and robust backend architectures. Advocate for clean code and privacy-first design.

Kontakt

Masz pytanie lub pomysł na projekt internetowy? Napisz krótko, o co chodzi. Formularz korzysta z reCAPTCHA do ochrony przed spamem.

Napisanie komentarza

Doświadczenia z innymi wtyczkami lub środowiskami hostingowymi oraz pytania o konfigurację są tu mile widziane.

Adres e-mail nie jest publikowany. Pola obowiązkowe oznaczono gwiazdką.