Nie wszystkie kody WP są kodami publicznymi
Jeśli zamierzasz wydać coś publicznego, wszystkie rzeczy, które powiedział kovshenin , są całkowicie poprawne.
Sytuacja wygląda inaczej, jeśli zamierzasz napisać prywatny kod dla siebie lub swojej firmy.
Zewnętrzna pamięć podręczna obiektów to w każdym razie duża zaleta
W miarę możliwości bardzo zalecane jest ustawienie zewnętrznej pamięci podręcznej obiektów trwałych .
Wszystkie rzeczy powiedziane w odpowiedzi kovshenina na temat stanów nieustalonych i MySQL są bardzo prawdziwe, a biorąc pod uwagę, że sama WP i kilka wtyczek korzysta z pamięci podręcznej obiektów ... to poprawa wydajności, którą otrzymałeś, absolutnie warta (małego) wysiłku w konfiguracji nowoczesny system pamięci podręcznej, taki jak Redis lub Memcached.
Wartości w pamięci podręcznej mogą nie być dostępne: w porządku
Ponadto tak, pamięć podręczna obiektów zewnętrznych nie jest niezawodna. Nigdy nie powinieneś polegać na fakcie, że istnieje stan przejściowy. Musisz upewnić się, że działa, jeśli buforowane nie są tam, gdzie powinny być.
Pamięć podręczna nie jest przechowywana, pamięć podręczna to pamięć podręczna.
Używaj pamięci podręcznej wybiórczo
Zobacz ten przykład:
function my_get_some_value($key) {
// by default no cache when debug and if no external object_cache
$defUse = ! (defined('WP_DEBUG') && WP_DEBUG) && wp_using_ext_object_cache();
// make the usage of cache filterable
$useCache = apply_filters('my_use_cache', $defUse);
// return cached value if any
if ($useCache && ($cached = get_transient($key))) {
return $cached;
}
// no cached value, make sure your code works with no cache
$value = my_get_some_value_in_some_expensive_way();
// set cache, if allowed
$useCache and set_transient($key, $value, HOUR_IN_SECONDS);
return $value;
}
Używając takiego kodu w swojej prywatnej witrynie, wydajność witryny może się znacznie poprawić , szczególnie jeśli masz wielu użytkowników.
Uwaga:
- Domyślnie pamięć podręczna nie jest używana, gdy debugowanie jest włączone, więc mam nadzieję, że w środowisku programistycznym. Uwierz mi, pamięć podręczna może sprawić, że debugowanie stanie się piekłem
- Domyślnie pamięć podręczna nie jest również używana, gdy WP nie jest ustawione na używanie pamięci podręcznej obiektów zewnętrznych. Oznacza to, że cały problem związany z MySQL nie istnieje, ponieważ nie używasz przejściowych, gdy używają MySQL. Prawdopodobnie łatwiejszą alternatywą byłoby użycie
wp_cache_*
funkcji , więc jeśli nie zostanie skonfigurowana zewnętrzna pamięć podręczna, pamięć podręczna dzieje się w pamięci i baza danych nigdy nie jest zaangażowana.
- Użycie pamięci podręcznej można filtrować, aby obsłużyć niektóre przypadki brzegowe, które możesz napotkać
No Webscale If No Cache
Nie powinieneś próbować rozwiązywać problemów z prędkością pamięci podręcznej. Jeśli masz problemy z prędkością, powinieneś przemyśleć kod.
Ale aby skalować stronę internetową w skali internetowej, pamięć podręczna jest dość wymagana .
Wiele razy (ale nie zawsze) fragmentaryczna, kontekstowa pamięć podręczna jest znacznie bardziej elastyczna i odpowiednia niż agresywne buforowanie na całej stronie.
Twoje pytania:
Czy powinienem w ogóle korzystać z Transient API?
To zależy .
Czy Twój kod zużywa dużo zasobów? Jeśli nie, być może nie ma potrzeby buforowania. Jak już powiedziano, nie jest to tylko kwestia prędkości. Jeśli twój kod działa szybko, ale wymaga kilku procesorów i pamięci dla kilku użytkowników ... co się stanie, gdy masz 100 lub 1000 równoczesnych użytkowników?
Jeśli zdasz sobie sprawę, że pamięć podręczna byłaby dobrym pomysłem ..
... i jest kodem publicznym: prawdopodobnie nie . Możesz rozważyć buforowanie wybiórcze, jak w moim przykładzie powyżej w kodzie publicznym, ale zwykle lepiej jest, jeśli pozostawisz takie decyzje implementatorom.
... i jest prywatnym kodem: prawdopodobnie tak . Ale nawet w przypadku prywatnego kodu selektywne buforowanie jest nadal dobrą rzeczą, na przykład do debugowania.
Pamiętaj jednak, że wp_cache_*
funkcje te zapewniają dostęp do pamięci podręcznej bez ryzyka zanieczyszczenia bazy danych.
Czy powinienem używać Transient API do buforowania tablicy $ related_posts array, czy $ html_output string?
To zależy od wielu rzeczy. Jak duży jest sznurek? Której zewnętrznej pamięci podręcznej używasz? Jeśli masz zamiar buforować posty, dobrym pomysłem może być przechowywanie identyfikatora jako tablicy, zapytanie odpowiedniej liczby postów według ich identyfikatora jest dość szybkie.
Uwagi końcowe
Transient API jest prawdopodobnie jedną z najlepszych rzeczy w WordPress. Dzięki wtyczkom, które można znaleźć dla dowolnego rodzaju systemów pamięci podręcznej, staje się głupim, prostym interfejsem API dla dużej liczby programów, które mogą działać pod maską.
Poza WordPress bardzo trudno jest znaleźć taką abstrakcję, która działa od razu z zestawem różnych systemów buforowania i umożliwia przełączanie się z jednego systemu do drugiego bez żadnego wysiłku.
Rzadko słyszysz, jak mówię, że WordPress jest lepszy niż inne nowoczesne rzeczy, ale przejściowy interfejs API jest jedną z niewielu rzeczy, za którymi tęsknię, gdy nie pracuję z WordPress.
Z pewnością pamięć podręczna jest trudna, nie rozwiązuje problemów z kodem i nie jest srebrną kulą, ale jest czymś, czego potrzebujesz, aby zbudować działającą witrynę o dużym ruchu.
Pomysł WordPressa na użycie niedostatecznie zoptymalizowanej tabeli MySQL do buforowania jest dość szalony, ale nie lepiej trzymać się z dala od bufora tylko dlatego, że WordPress domyślnie to robi.
Musisz tylko zrozumieć, jak to działa, a następnie dokonać wyboru.