Dopalić WordPress’a

teoretyczne i praktyczne sposoby użycia cachowania

Marcin Pietrzak

przełam sieć

http://iworks.pl/

Definicje

  • Cache/buforowanie przechowywanie na później
  • WP Object Cache klasa realizujaca przechowywanie
  • Persistent cache przechowywanie stałe
  • Transient cache przechowywanie tymczasowe
  • memcache(d) serwer cacheowania w pamięci, klucz=>wartość

Po co mi to?

  • Poprawa wydajności strony mniejsze obciążenie serwera www oraz serwera bazy danych
  • Skrócenie się czasu ładowania krótsze oczekiwanie na wygenerowaną stronę
  • Zwiekszenie czasu wizyty szybciej strona na ekranie, to większe zadowolenie użytkownika
  • Mniejsze opłaty za serwer

Kiedy używać?

  • Wysoki ruch na stronie kilka zapytań na sekundę
  • Słaby serwer aplikacji
  • Słaby serwer bazy danych
  • Efekt wykopu nagły i niespodziewany wzrost ruchu o kilka rzędów wielkości

WP Object Cache

  • Klasa przeznaczona do obslugi cachowania
  • Nie używać bezpośrednio obiektu
  • Korzystać z wbudowanych funkcji
  • Domyślne cachowanie nie jest stałe
  • Konieczność użycia wtyczki do stałego przechowywania

Dostępne zmienne w funkcjach

  • $key identyfikator cachowanej zawartości (hash)
  • $data zawartość do zachowania
  • $group grupa, używana wtedy gdy wystąpi obawa lub potrzeba powtórzenia $key (opcjonalny)
  • $expire czas przechowywania, domyślna wartość to 0 (zero) - przechowuj tak długo jak to możliwe (opcjonalny)

Wbudowane funkcje 1/2

  • wp_cache_add( $key, $data, $group, $expire ) dodaje zawartości do istniejącego klucza.
  • wp_cache_set( $key, $data, $group, $expire ) ustawia zawartość, nadpisuje jeżeli istniej
  • wp_cache_get( $key, $group ) pobiera zawartość klucza
  • wp_cache_replace( $key, $data, $group, $expire ) zastępuje zawartość istniejącego klucza

Wbudowane funkcje 2/2

  • wp_cache_delete( $id, $group ) czyści cache wybranej grupy
  • wp_cache_flush() czyści całą zawartość cache

Przykład

Najczęstszym przypadkiem użycia cachowania jest zapamiętywanie rezultatu powtarzających sie zapytań do bazy danych

$result = wp_cache_get( 'my_result' );
if ( false == $result ) {
    $result = $wpdb->get_results( $query );
    wp_cache_set( 'my_result', $result );
}
// niezależnie od sposobu uzyskania danych, obsłuż je normalnie...

Wtyczki realizujące stałe cachowanie

Domyślnie cache przechowywany jest tylko przez czas trwania zapytania

Transients API

  • Prosta metoda przechowywania danych brak konieczności używania jakichkolwiek dodatków
  • Wykorzystanie mechanizmu podobnego do API opcji użycie tabeli wp_options
  • Przewidywalny czas ważności danych o nowe wpisy z feeda pytamy co godzinę
  • Przykładowe użycie standardowy widget RSS

Transients API: zmienne

  • $transient identyfikator (ograniczenie do 40 znaków)
  • $data zawartość do zachowania
  • $expire liczba sekund po jakich zawartość zostanie usunięta z bazy danych

Transients API: funkcje

  • set_transient( $transient, $data, $expire ) zapis danych
  • get_transient( $transient ) pobranie danych
  • delete_transient( $transient ) usunięcie danych
  • set_site_transient() odpowiednik set_transient() dla MU
  • get_site_transient() odpowiednik get_transient() dla MU

Transients API: przykład

Przechowanie danych zapytania:

// sprawdź czy dane już istnieją i pobierz je
if ( false ===
    ( $special_query_results = get_transient( 'special_query_results' ) ) ) {
    // jeżeli dane nie są dostępne, to wytwórz je
     $special_query_results = new WP_Query(
         'cat=5&order=random&tag=tech&post_meta_key=thumbnail'
    );
    set_transient(
        'special_query_results',
    $special_query_results,
    12*60*60
    );
}

// niezależnie od sposobu uzyskania danych, obsłuż je normalnie...

Varnish

  • Web accelerator cachuje po stronie serwera, wymagana pełna konfiguracja backendu z którym zachowuje kontakt
  • Pamięć i dysk sposób przechowywania danych
  • Elastyczna konfiguracja za pomocą VCL Varnish Configuration Language
  • Load balansing sprawdzanie żywotności backendu

WordPress Varnish

Wtyczka umożliwia sterowanie varnishem

Squid

Proxy cache serwer

  • Nie wymaga definicji backendów
  • Nie sprawdza czy żyją
  • Nie da się nim tak łatwo sterować
  • Proste użycie
  • Dobre cachowanie

Podsumowanie

  • Transient Cache cache tymczasowy
  • Persistent Cache cache stały, po zainstalowaniu wtyczek
  • memcache dedykowany serwer przechowujący dane w pamięci
  • Wtyczki: W3 Total Cache, Memcached Object Cache
  • Varnish proxy cache serwer

Bibliografia

Licencja

Uznanie autorstwa - Na tych samych warunkach 3.0 Unported (CC BY-SA 3.0)

Wolno:

  • tworzyć utwory zależne
  • użytkować utwór w sposób komercyjny

Na następujących warunkach:

  • Uznanie autorstwa - Utwór należy oznaczyć w sposób określony przez Twórcę lub Licencjodawcę
  • Na tych samych warunkach - Jeśli zmienia się lub przekształca niniejszy utwór, lub tworzy inny na jego podstawie, można rozpowszechniać powstały w ten sposób nowy utwór tylko na podstawie takiej samej licencji.