Kiedy powinienem używać interfejsu Transjentów API?

16

Nigdy wcześniej nie korzystałem z Transient API i zastanawiałem się, czy ktoś ma wskazówki, kiedy go używać. Artykuł w Kodeksie sugeruje, że jako twórca motywów chciałbym ustawić każdy nowy WP_Query()jako przejściowy; Zakładam, że to samo można powiedzieć o bezpośrednich zapytaniach $ wpdb i query_posts(). Czy to przesada? I / lub Czy są inne miejsca, w których powinienem domyślnie go używać?

Często używam wtyczek buforujących na mojej stronie (zwykle W3 Total Cache) i wygląda na to, że użycie Transientów może podnieść skuteczność wtyczki, ale nie chcę zwariować, pakując wszystko w transjenty, jeśli nie jest to najlepsza praktyka.

Michelle
źródło
Dziękuję wszystkim, chciałbym oznaczyć więcej niż jedną odpowiedź jako „rozwiązanie”. Świetne informacje, bardzo mile widziane!
Michelle,

Odpowiedzi:

16

Przejściowe są świetne, gdy wykonujesz złożone zapytania w swoich motywach i wtyczkach. Zwykle używam transjentów do takich rzeczy jak menu i pokazywania innych rzeczy takich jak Tweety z Twittera na przykład na pasku bocznym. Nie użyłbym ich do absolutnie wszystkiego, więc tylko tymczasowe fragmenty danych, które można buforować.

Pamiętaj, że jeśli użyjesz czegoś takiego jak Memcached ze stanami przejściowymi, zauważysz ogromny wzrost wydajności. Reguła dotycząca stanów nieustalonych polega na tym, aby nie używać ich do danych, które nie powinny wygasać, ponieważ tak naprawdę są to tylko dane tymczasowe i należy pamiętać, że dane przejściowe nie zawsze są przechowywane w bazie danych.

Niektóre zastosowania dla stanów nieustalonych :

  • Złożone i niestandardowe zapytania do bazy danych
  • Menu nawigacji Wordpress
  • Widżety paska bocznego, które wyświetlają informacje takie jak; tweety, lista ostatnich odwiedzających witrynę lub strumień zdjęć Flickr
  • Buforowanie chmur tagów

Ten artykuł jest bardzo pouczający i zawiera szybkie testy porównawcze pokazujące, w jaki sposób transjenty mogą przyspieszyć twoją witrynę, a nawet ma kilka przykładów. Ten drugi artykuł zawiera również kilka świetnych przykładów użycia stanów nieustalonych, które mogą pomóc ci zrozumieć, do czego ich używać.

Dwayne Charrington
źródło
2
Inne zastosowanie: buforowanie zewnętrznych żądań HTTP. Jak uderzenie w interfejs API Twittera. Nie rób tego przy każdym ładowaniu strony, buforuj wyniki przejściowo.
chrisguitarguy
11

Istnieje kilka mechanizmów buforowania w WordPress, a ich mechanizmy różnią się w zależności od wyboru pamięci podręcznej obiektów (macierzystej lub nie):

+-----------+-------------------------+---------------------+
|           |         Native          | Object cache plugin |
+-----------+-------------------------+---------------------+
| Option    | Persistent (database)   | N/A                 |
| Transient | Persistent (database)   | Persistent (varies) |
| Cache     | Non-persistent (memory) | Persistent (varies) |
+-----------+-------------------------+---------------------+

Krótko mówiąc, oznacza to, że przejściowy jest zawsze trwały (przetrwa między ładowaniami stron w przeciwieństwie do natywnie pamięci podręcznej), ale będzie korzystał z niestandardowego magazynu, jeśli jest dostępny (w przeciwieństwie do Opcji).

To sprawia, że ​​transjenty są najbardziej uniwersalnym wyborem do buforowania.

Jednak z elastycznością wiąże się niedostateczna złożoność i jest z nimi całkiem sporo niuansów (takich jak ograniczenie długości nazwy, różne zachowanie z wygaśnięciem i bez niego, brak wyrzucania elementów bezużytecznych), które sprawiają, że są bardziej złożone niż się wydaje.

Ogólny:

  • użyj opcji, aby zapisać rzeczy, które muszą być trwałe
  • użyj Transjentów do buforowania czegokolwiek innego
  • używaj pamięci podręcznej, gdy bardzo dobrze rozumiesz wszystkie trzy i wiesz, że pamięć podręczna pasuje do przypadków użycia lepiej niż inne (co nie będzie często)
Rarst
źródło
4

Myślę, że kod ze Sterlinga można ulepszyć, nie wywołując dwukrotnie funkcji get_transient. Zamiast tego zapisz pierwszy wynik w zmiennej tymczasowej. Ponieważ ideą Transient API jest szybkość ;-)

private function _get_data( $query) {
    $result = get_transient( $query );
    if ( $result ) {
       return $result;
    } else { 
       return $this->_get_query( $query ); 
    }
}
Tomasz
źródło
3

Krótka odpowiedź: powinieneś go używać, kiedy / gdzie możesz.

Długa odpowiedź:

Transjentowy interfejs API służy do buforowania. Więc chcesz z niego korzystać jak najwięcej. Możesz napisać funkcję, która zrobi to za Ciebie.

To nie jest przesada, a jeśli zrobione poprawnie, w końcu będzie dość eleganckie:

// If the transient isn't false, then you can just get the cached version.
// If not, we'll call another function that runs a database query.
private function _get_data( $query) {
    return
    ( get_transient( $query ) ) ?
    get_transient( $query ) :
    $this->_get_query( $query );
}

// After you make the query, set the transient so you can leverage on caching plugins.
private function _get_query( $query ) {
  // Database logic. Results go to $results.
  ...
  set_transient( $query, $results , 0 ); // 0 Means cache for as long as you can.
}
Sterling Hamilton
źródło
3

Transjenty API są bardzo przydatne, gdy pobierasz dane ze źródeł zewnętrznych, takich jak Facebook, Twitter.

Aby lepiej zrozumieć, czym jest Transients API i jaka jest różnica z funkcją Cache WordPress, polecam obejrzeć rozmowy Otto i Nanica z WordCamp San Francisco 2011

Mamaduka
źródło