Przewodnik po transjentach w WordPress
Opublikowany: 2023-02-12Jako programista WordPress prawdopodobnie już wiesz, jak ważna jest wydajność dla udanej strony internetowej. Jednak zrozumienie transjentów w WordPress i tego, jak pomogą ci zoptymalizować twoje projekty, może być trochę trudne.
Na szczęście, kiedy je rozbijesz, transjenty nie są aż tak trudne do zrozumienia. Dopóki pamiętasz o kilku kluczowych wskazówkach, powinieneś być na dobrej drodze do włączenia ich do następnej wtyczki WordPress.
W tym poście przedstawimy przegląd tego, czym są transjenty WordPress, a także jak i kiedy ich używać. Jest dużo do omówienia, więc przejdźmy od razu do rzeczy!
Czym są transjenty WordPress?
Aby zrozumieć stany przejściowe, warto mieć podstawową wiedzę na temat buforowania i interfejsów programowania aplikacji (API).
Buforowanie danych strony internetowej jest zasadniczo sposobem tymczasowego zapisywania danych witryny internetowej, dzięki czemu w przypadku wielu żądań tych samych danych witryna nie musi ponownie uruchamiać MySQL lub PHP. Może to zaoszczędzić sekundy czasu i zmniejszyć obciążenie serwera.
Pomysł polega na tymczasowym przechowywaniu danych, stąd słowo „przejściowe”. Interfejs API Transients jest podobny do interfejsu API opcji WordPress. Nadajesz danym nazwę i wartość — która może być złożona, jak wielopoziomowa tablica PHP — i przechowuje dane. Później, być może nawet na inne żądanie, możesz odzyskać te dane, używając ich nazwy. Różnica polega na tym, że dane w tabeli Opcje pozostaną na zawsze. Oznacza to, że możesz przechowywać dane, a trzy lata później nadal tam będą.
Każdy transjent składa się z trzech części:
- $przejściowe. Jest to ciąg używany do identyfikacji transjentu i wywołania go. Nazywa się to również „kluczem” lub „nazwą” transjentu.
- $wartość. Są to informacje pobierane za pośrednictwem interfejsu API. Wartością stanu przejściowego może być obiekt, tablica, liczba lub ciąg znaków.
- $wygaśnięcie. Tak długo transjent pozostaje w Twojej bazie danych, zanim zostanie usunięty i będziesz musiał ponownie uzyskać dostęp do potrzebnych informacji za pośrednictwem interfejsu API.
Na pierwszy rzut oka to wszystko, co dotyczy transjentów WordPress. Aby jednak właściwie z nich korzystać, musisz wiedzieć więcej.
Jednak dane transjentowe nie będą się trzymać. O to chodzi! Możesz poprosić o dane i stwierdzić, że ich brakuje na jeden z dwóch sposobów. Po pierwsze, kiedy przechowujesz dane, określasz datę wygaśnięcia. Na przykład możesz powiedzieć „przechowuj to przez trzy godziny”. Więc jeśli poprosisz o to po czterech godzinach, będzie go brakować.
Drugi sposób polega na tym, że część danych może po prostu zniknąć w dowolnym momencie iz dowolnego powodu. To brzmi dziwnie, wiem! Jaki jest sens przechowywania danych, jeśli nie można na nie liczyć? Chodzi o to, że przechowywanie jest żądaniem, które WordPress będzie próbował uszanować, ale ze względu na tę elastyczność możliwe jest stosowanie różnych rodzajów implementacji do przechowywania przejściowego, a to oznacza, że możliwe jest użycie różnych, zaawansowanych technologii, aby transjenty były niezwykle wydajne i działać poprawnie nawet w środowisku klastrowym z wieloma serwerami.
Z powodu tego „znikania w dowolnym momencie” zwykle używasz transjentów do pamięci podręcznej. Oznacza to, że jeśli potrzebujesz obliczyć coś, co zajmuje czas rzeczywisty, na przykład wolne zapytanie MySQL lub pobieranie danych z zewnętrznego źródła, takiego jak czyjś Twitter lub kanał RSS, możesz przechowywać obliczone dane w stanie przejściowym, wiedząc, że jeśli ich zabraknie zawsze można go odtworzyć. Ale w zwykłym przypadku — gdy NIE znikają — masz dane szybko, bez konieczności ponownego obliczania.
Korzyści z używania transjentów w witrynie WordPress
Jak wspomnieliśmy wcześniej, główną zaletą transjentów jest to, że poprawiają wydajność witryny. Oto ogólny zarys tego, jak to działa, na przykładzie wtyczki Google Site Kit.
Gdy wtyczka jest aktywowana, używa interfejsu API do wyświetlania danych z platform takich jak Analytics i Search Console na pulpicie nawigacyjnym WordPress. Bez transjentów WordPress musiałby pobierać te informacje z każdego narzędzia za każdym razem, gdy przeglądałeś pulpit nawigacyjny Site Kit:
Zamiast tego Site Kit zawiera transjenty, które przechowują dane z Analytics i Search Console. Są one przechowywane przez jeden dzień (lub godzinę, jeśli platforma nie zwraca żadnych danych).
Za każdym razem, gdy uzyskujesz dostęp do pulpitu nawigacyjnego Site Kit, WordPress może szybko pobrać zapisane informacje z bazy danych bez konieczności ponownego wywoływania interfejsu API. Po upływie okresu ważności stare dane są usuwane.
Oznacza to, że nie musisz za każdym razem czekać na załadowanie wyników. Jest to przydatne w różnych sytuacjach, takich jak wyświetlanie liczby udostępnień postów w mediach społecznościowych lub wyświetlanie kanału informacyjnego.
Wady korzystania z transjentów w Twojej witrynie WordPress
To, co sprawia ci kłopoty z transjentami, to różne i trudne do odtworzenia zachowania, które pojawiają się, gdy twoja wtyczka/motyw działa w różnych implementacjach transjentów. Różne implementacje transjentów oznaczają, że napotkasz problemy TYLKO w niektórych konfiguracjach z niektórymi typami witryn, a nigdy w innych. Jako programista, jeśli nie jesteś świadomy tej pułapki i nie kodujesz odpowiednio, pomyślisz, że Twój kod jest dobry, ale w rzeczywistości zepsuje się w terenie i nawet nie będziesz wiedział, jak go odtworzyć !
Kiedy używać WordPress Transients
Transjenty są usuwane z Twojej bazy danych, gdy osiągną koniec okresu wygaśnięcia. Z tego powodu chcesz ich używać tylko do informacji, które są stale odtwarzane.
Ponadto, chociaż mogą poprawić wydajność projektu, transjenty są najlepiej zarezerwowane dla dużych zapytań i wywołań zdalnych. Jeśli utworzenie przejściowego zasobu będzie wymagało więcej kodu niż po prostu wysłanie nowego żądania zasobu za każdym razem, gdy będzie potrzebny, lepiej zrezygnować.
Zarządzanie transjentami WordPress
Jeśli chcesz łatwo zobaczyć transjenty, które aktualnie działają w Twojej witrynie WordPress, i zarządzać nimi, możesz zainstalować wtyczkę Transients Manager:
Zawiera pełną listę transjentów, które można znaleźć, przechodząc do Narzędzia > Transjenty :
Tutaj możesz zobaczyć wszystkie trzy elementy przejściowe, które wymieniliśmy wcześniej – klucz (nazwa), wartość i okres wygaśnięcia. Możesz edytować dowolną z tych funkcji, klikając łącze Edytuj :
Transjenty można również usuwać pojedynczo lub zbiorczo.
Podstawowe operacje używane w stanach przejściowych
Jeśli chodzi o kodowanie własnych transjentów, prawdopodobnie będziesz musiał wykonać trzy podstawowe operacje. Poniżej omówiliśmy każdy z nich, nadal używając narzędzia Site Kit jako przykładu.
1. Ustawianie stanów przejściowych
Tworzenie lub „ustawianie” transjentów to proces definiowania klucza, wartości i okresu wygaśnięcia oraz zastosowania tych informacji do odpowiednich danych. W tym celu użyjesz następującego formatu:
Set_transient ('key', $value, expiration_period)
Oto kod używany w Google Site Kit do ustawiania stanu przejściowego, który przechowuje dane analityczne:
// Cache "data found" status for one day, "no data" status for one hour. set_transient( $transient_key, (int) $has_data, $has_data ? DAY_IN_SECONDS : HOUR_IN_SECONDS ); } return (bool) $has_data; } }
Klucz przejściowy to googlesitekit_analytics_has_data (zdefiniowany wcześniej w kodzie), wartość to $has_data lub $has_data ? , a okres wygaśnięcia to jeden dzień lub jedna godzina (w zależności od wartości).
2. Odzyskiwanie transjentów
Odzyskiwanie transjentów jest nieco bardziej skomplikowane. Najpierw musisz użyć funkcji, aby zażądać niezbędnych danych. Następnie sprawdzisz, czy ma odpowiedni transjent, który powinien zostać załadowany, zamiast tworzyć nowe żądanie API.
Wynik może wyglądać mniej więcej tak:
function some_function(){ $transient = get_transient('key');
Następnie musisz albo zwrócić transjent, albo usunąć wygasłe dane i wykonać nowe połączenie ze źródłem. Na koniec musisz ustawić transjent po zwróceniu nowych danych, aby były one przechowywane ponownie, aż skończy się okres wygaśnięcia.
W Google Site Kit wygląda to tak:
/** * Checks whether Analytics data exists for the given URL. * * @since 1.4.0 * * @param string $url The url to check data for. * @return bool */ protected function has_data_for_url( $url ) { if ( ! $url ) { return false; } $transient_key = 'googlesitekit_analytics_has_data_' . md5( $url ); $has_data = get_transient( $transient_key ); if ( false === $has_data ) { /* @var Google_Service_AnalyticsReporting_Report[]|WP_Error $reports Array of reporting report instances. */ $reports = $this->get_data( 'report', array( 'url' => $url, 'metrics' => array( array( 'expression' => 'ga:users' ), array( 'expression' => 'ga:sessions' ), ), ) ); if ( is_wp_error( $reports ) ) { $reports = array(); // Bypass data check and cache. } foreach ( $reports as $report ) { /* @var Google_Service_AnalyticsReporting_Report $report Report instance. */ $report_data = $report->getData(); /* @var Google_Service_AnalyticsReporting_ReportData $report_data Report data instance. */ foreach ( $report_data->getTotals() as $date_range_values ) { /* @var Google_Service_AnalyticsReporting_DateRangeValues $date_range_values Values instance. */ if ( isset( $date_range_values[0], $date_range_values[1] ) && ( 0 < $date_range_values[0] || 0 < $date_range_values[1] ) ) { $has_data = true; break 2; } } }
Po tym kodzie powinien następować fragment kodu, który uwzględniliśmy w poprzedniej sekcji dotyczący ustawiania stanów przejściowych.
3. Usuwanie stanów przejściowych
W niektórych przypadkach może się okazać, że chcesz usunąć transjent. Na przykład, jeśli chcesz zawsze widzieć najbardziej aktualne dane analityczne w Google Site Kit, lepiej nie buforować danych (chociaż nie zalecamy faktycznego usuwania przejściowych danych Site Kit).
W przeciwnym razie wtyczka będzie wyświetlać te same wyniki przez cały dzień, nawet jeśli masz nowych użytkowników. Ponieważ stan przejściowy trwa 24 godziny, dane, które przeglądasz po południu, będą po prostu zapisywaną w pamięci podręcznej wersją danych załadowanych rano.
Najłatwiejszym sposobem usunięcia transjentów jest użycie wtyczki Transients Manager. Jeśli jednak chcesz zamiast tego użyć kodu, możesz użyć funkcji delete_transient() . Wszystko czego potrzebujesz to klucz przejściowy:
delete_transient('key');
Jednak będziesz musiał powtórzyć to dla każdego transjentu, który chcesz usunąć.
Przejściowa data ważności: jak to działa?
Przejściowe okresy wygaśnięcia można wyrazić na kilka różnych sposobów. Najprostsze dwie opcje to:
- W sekundach ( set_transient('key', $value, 86400))
- Używanie stałych czasowych WordPress ( set_transient('key', $value, DAY_IN_SECONDS))
Alternatywnie można również ustawić nieustalone stany przejściowe. Może to być przydatne w sytuacjach, w których chcesz zachować takie same dane przejściowe, dopóki ręcznie nie usuniesz i nie zresetujesz informacji z pamięci podręcznej.
Tworzenie nigdy nie wygasających transjentów jest dość proste. Po prostu pozostaw parametr expiration w funkcji set_transient pusty lub zidentyfikuj go jako zero.
Zrozumienie interfejsu WordPress Transients API
WordPress Transients API to po prostu środek, za pomocą którego informacje są buforowane w bazie danych Twojej witryny. Umożliwia wszystkie powiązane operacje, które omówiliśmy w tym poście, w tym ustawianie, pobieranie i usuwanie stanów przejściowych.
Innymi słowy, Transients API to tylko część rdzenia WordPressa, która pozwala na używanie transjentów.
Dwie najczęstsze implementacje backendu Transients API:
- Ten wbudowany w WordPress, a zatem zdecydowanie najpowszechniejszy. Wartości przejściowe są przechowywane w tabeli wp_options, tak jak zwykłe opcje. W przypadku stanów nieustalonych przechowywana jest dodatkowa opcja przechowywania daty wygaśnięcia. Gdy uzyskuje się dostęp do stanu przejściowego, WordPress najpierw pobiera datę wygaśnięcia. Jeśli wygasła, WordPress usuwa obie opcje z tabeli, „czyszcząc” w ten sposób dane i udaje, że nigdy ich tam nie było. Jeśli nie wygasł, pobiera zawartość z tabeli opcji.
- Memcached. Memcached to bardzo proste, ale wydajne i niezawodne oprogramowanie po stronie serwera, zaprojektowane tak, aby robić dokładnie to, co ma robić Transients API — przechowywać dane na podstawie klucza, który wygasa w określonym czasie i który może zniknąć w dowolnym momencie, jeśli zajdzie taka potrzeba Do.
Używanie memcached zamiast WordPress Transients ma dwie szczególne zalety, dlatego automatycznie wstępnie konfigurujemy go tutaj w WP Engine. Mamy twoje plecy
I. Memcached jest 10-100 razy szybszy w przechowywaniu i pobieraniu wartości niż WordPress Transients, co jest szczególnie interesujące, ponieważ celem transjentów jest buforowanie danych w celu zwiększenia szybkości witryny.
II. Memcached ustawia maksymalną ilość miejsca, jaką zajmie na dane (np. 64 MB pamięci RAM), co oznacza, że jeśli witryna przechowuje zbyt dużo danych na raz, automatycznie wyrzuci stare dane, dzięki czemu nigdy nie zabraknie miejsca. Ale wbudowane WordPress Transients będą przechowywać dowolną ilość danych w tabeli opcji.
Stosowanie transjentów w twoim rozwoju
Załóżmy, że wielokrotnie odczytujesz i zapisujesz ten sam klucz Transients i załóżmy, że jest to 1 000 danych. W takim przypadku zarówno Memcached, jak i WordPress Transients zrobią dokładnie to, czego od nich oczekujesz, i oba zajmą około 1k miejsca (w tabeli opcji lub w memcached).
Załóżmy teraz, że czytasz i zapisujesz różne klucze Transients, różne dla każdej sesji przeglądarki. Krótko mówiąc, co jeśli przechowujesz dane sesji użytkownika w Transients? Ma to sens na powierzchni. Dane sesji nie powinny trwać wiecznie, a Ty nie chcesz zawracać sobie głowy specjalnymi tabelami bazy danych. Poza tym wiele firm hostingowych WordPress nie zezwala na sesje PHP, więc to naprawdę kolejna najlepsza rzecz. Jest nawet szybki i wieloserwerowy.
Tutaj pojawiają się różnice. W przypadku Memcached i witryny o małym ruchu ta metoda wydaje się działać. Wartości trwają przez chwilę, a następnie są usuwane po wygaśnięciu. Jeśli jednak serwer jest mocno obciążony, ilość danych sesji, które serwer musi przechowywać, przekroczy przestrzeń dostępną w memcached, a zatem zaczniesz tracić dane sesji szybciej niż myślisz. A gdybyś nie testował dokładnie w tym mocno obciążonym środowisku, nigdy byś tego nie wiedział. Ogólnie rzecz biorąc, środowiska te zapełniają memcache tak szybko, że skutecznie memcache jest wyłączane, ponieważ nigdy nie może przechowywać danych wystarczająco długo, aby były użyteczne. W rzeczywistości w ogóle nie masz pamięci podręcznej Transient API!
Ale dzięki WordPress Transients uzyskujesz inne, ale nadal bardzo niepożądane zachowanie. Ponieważ wartości są zapisywane w bazie danych, a nie w bloku pamięci RAM o stałym rozmiarze, wszystkie się trzymają. Co oznacza, że nawet przy mocno obciążonej witrynie nadal masz dane sesji. Wspaniały!
Albo tak myślałeś. Ponieważ to, co nie jest powiedziane w Transient API, to to, co dzieje się, gdy używasz unikalnych kluczy, takich jak sesje. A to, co dzieje się w przypadku metody wbudowanej, polega na tym, że tabela opcji zapełnia się w nieskończoność! Ponieważ: „Oczyszczanie starych danych” WordPress działa tylko wtedy, gdy poprosisz o klucz (jak omówiliśmy wcześniej). Jeśli po prostu zostawisz klucz, pozostanie on w tabeli opcji na zawsze. Nie ma oddzielnego procesu, który je czyści!
Nie tylko jesteśmy świadomi tego problemu, ale chcemy pomóc naszym klientom, którzy mogą uruchamiać kod, który tego nie rozumie. I tu pojawia się „zarządzany” w zarządzanym WordPressie! Każdej nocy mamy zautomatyzowany proces przeglądania tabeli opcji pod kątem wygasłych transjentów i usuwania ich (zarówno danych, jak i daty ważności). Bum! Odeszli i nie musisz się o nich martwić.
To wspaniale, że to robimy, ale jako twórca ogólnej wtyczki lub motywu, który powinien działać poprawnie w dowolnym środowisku hostingowym, nie możesz tego zrobić we wszystkich potencjalnych środowiskach, w których może zostać wdrożona Twoja wtyczka lub motyw, a ty chcesz mieć pewność, że dostarczasz swoim użytkownikom i klientom możliwie najbardziej zoptymalizowany kod.
Jednak teraz, gdy wiesz, jak Transjenty mogą się nie udać, dobrym pomysłem może być przyjrzenie się i zobaczenie, jak możesz zwiększyć wydajność swojego kodu. Są szanse, że jeśli przeczytałeś tak daleko, lubisz optymalizować swój kod, a ten wpis na blogu może rzucić ci wyzwanie i zmotywować do ponownego napisania niektórych rzeczy, aby były bardziej skalowalne!
Zrób więcej ze swoją witryną WordPress
Jako programista WordPress kluczowe znaczenie ma zapewnienie użytkownikom końcowym dostępu do zdalnych danych przy zachowaniu wysokiej wydajności. Transjenty WordPress mogą pomóc Ci to osiągnąć.
Nie zaszkodzi jednak uzyskać dodatkową pomoc w postaci błyskawicznego hostingu WordPress i profesjonalnych zasobów dla programistów. Niezależnie od tego, czy dopiero zaczynasz kodować, czy jesteś doświadczonym profesjonalistą, jesteśmy gotowi pomóc. Sprawdź nasze plany już dziś!