Optymalizacja WordPress cz 2

W pierwszej części na temat optymalizacji bloga opartego na WordPress skupiliśmy się na kilku elementach:
Zmianie memory_limit() poprzez php.ini, .htaccess, lub ini_set() w php. Następnie zapoznaliśmy się z częścią możliwości optymalizacji po stronie front-end’u (cache).

W dzisiejszej części będziemy kontynuować proces optymalizacji do tego stopnia, aby możliwym było bezproblemowe korzystanie z platformy blogowej.

Zacznijmy od optymalizacji bazy danych.

Nieużywane szablony

Jeśli uruchamiając blog nie mogliśmy się zdecydować na konkretny szablon (theme), próbowaliśmy kliku z nich, do tego ustawialiśmy w nich jakieś opcje, dodatki, konfiguracje – to po zmianie na inny szablo wpisy dokonane dla poprzednich szablonów pozostaną zapisane w bazie. Jest to dobre rozwiązanie w przypadku, gdy zechcemy zmienić szablon (powrócić do wcześniej ustawionego) – konfiguracja zostaje przywrócona do etapu na jakim ją pozostawiliśmy. Jednak jeśli zdecydujemy się już na ten jedyny, wybrany szablon, zwykle nie będziemy go zmieniać, raczej upiększać, modyfikować. Możemy zatem śmiało usunąć pozostałe, oraz wszystkie wpisy w bazie danych które po nich pozostały. W tym celu logujemy się do menedżera MySQl (SQLyog, PMA) przeglądamy tabelę wp_options w poszukiwaniu wpisów odnoszących się do starych szablonów, wtyczek, które odinstalowaliśmy i usuwamy je.

Nieaktualne ustawienia wtyczek

W moim przypadku usunięcie nieaktualnych wpisów odnoszących do ustawień kilku szablonów oraz wpisów pozostałych po wtyczkach zmniejszyło ilość wierszy w tabeli wp_options o około 80 rekordów (wszystkie z ustawionym autoload na 'yes'). Dodatkowo postanowiłem zmienić opcję autoload dla wybranych wpisów (po uprzednim pełnym backupie bazy). Ustawienia zostały zmienione tylko dla tych wpisów, odnośnie których znaczenia byłem pewien, oraz tych, które nie miały wartości. Samo zużycie pamięci zostało nieznacznie zmienione – w granicach błędu statystycznego. Jednak ilość zwróconych wyników uległa lekkiemu zmniejszeniu oraz zmniejszył się czas trwania zapytań – zatem przyśpieszenie już jakieś nastąpiło.

Indeksy

Przeglądając wyniki z WP Tuner (włączone ustawienia: Show Everything) natknąłem się na kilka niepoprawnych zapytań, na zapytania z narzutem, bez odpowiednio ustawionych indeksów. Niezbędnym okazało się ponowne zalogowanie do MySQL’a celem naniesienia poprawek poprzez dodanie indeksów. Zwykle brak indeksów występuje w przypadku wtyczek.

Szkice, wpisy autosave

Jeśli zakończyliśmy edycję wpisów, oraz wszystkie szkice zostały opublikowane, bądź są nam już niepotrzebne możemy je usunąć. Upewnijmy się tylko uprzednio, czy opublikowane wpisy są już ostateczne i nie będziemy chcieli wracać do poprzednich wersji. Funkcjonalność WordPress’a jaką jest automatyczne zapisywanie szkiców bywa bardzo przydatna. Jednak po zakończonej edycji wpisu, opublikowania go w wersji, która nie wymaga zmian, pozostałe wersje wpisu są już niepotrzebne. Usuniemy je za pomocą zapytania sql:

DELETE FROM wp_posts WHERE post_type = "revision";

Cache

W pierwszej części wspomniałem o systemach cache dostępnych jako wtyczki, a także o możliwości napisania własnych. Poza cache generowanych plików warto ustawiać czas ważności cache takich elementów jak pliki js, css, grafiki, dla przeglądarki. Tak, aby w przypadku braku modyfikacji przeglądarka nie pobierała ponownie tych plików, nawet nie zgłaszała potrzeby ich pobrania.

Jedną z opcji będzie wydłużenie domyślnego czasu ważności plików w zależności od ich rozszerzenia. Do tego celu posłużą nam dyrektywy apache oraz plik .htaccess. Odnajdujemy plik .htaccess w lokalizacji wp-content/cache, edytujemy:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
# BEGIN supercache
<IfModule mod_mime.c>
  <FilesMatch "\.html\.gz$">
    ForceType text/html
    FileETag None
  </FilesMatch>
  AddEncoding gzip .gz
  AddType text/html .gz
</IfModule>
<IfModule mod_deflate.c>
  SetEnvIfNoCase Request_URI \.gz$ no-gzip
</IfModule>
<IfModule mod_headers.c>
  Header set Cache-Control 'max-age=300, must-revalidate'
</IfModule>
<IfModule mod_expires.c>
  ExpiresActive On
ExpiresDefault A300
ExpiresByType application/x-javascript A3600
ExpiresByType text/css A3600
ExpiresByType image/gif A3600
ExpiresByType image/png A3600
ExpiresByType image/jpeg A3600
ExpiresByType text/plain A300
ExpiresByType application/x-shockwave-flash A3600
ExpiresByType video/x-flv A3600
ExpiresByType application/pdf A3600
ExpiresByType text/html A300
</IfModule>
# END supercache

Interesują nas wpisy od linii 16, czyli w momencie gdy moduł mod_expires.c jest dostępny. Wraz z nim dostajemy możliwość ustawienia domyślnego czasu ważności elementów strony w zależności od ich typu. Jak widzimy domyślnie ustawiony jest na A3600 – czyli 3600 sec = 1 godz. W przypadku, gdy grafiki nie będą się zbyt często zmieniać śmiało możemy wydłużyć ten okres do miesiąca czyli: A2592000. Zatem w liniach 19-23 możemy wpisać nowy czas aktualności plików dla przeglądarki.
Poza określaniem czasu w sekundach mod_expires daje możliwość określania czasu za pomocą słownych określeń, np:

1
2
3
4
5
6
# Słowne określenia czasu ważności cache
<IfModule mod_expires.c>
  ExpiresActive On
ExpiresDefault "access plus 1 week"
ExpiresByType application/x-javascript "access plus 1 month"
ExpiresByType text/css "modification plus 5 hours"

Więcej szczegółów na stronie apache – module mod_expires

Wtyczki

Ostatnią z przedstawionych tu opcji jest wybór odpowiednich wtyczek. Niemal do każdego zadania dostępnych jest wiele wtyczek. Część z nich jest trudna w zastąpieniu innymi, jednak są też takie, które możemy swobodnie zamienić. W tym celu należy pobrać kilka różnych wtyczek mających te samo zastosowanie i przetestować je włączając jedną, a wyłączając następne, następnie monitorując obciążenie pamięci wybrać te, które oferując zbliżoną funkcjonalność (przynajmniej wystarczającą, niezbędną) zużywają mniej zasobów. Po takich testach nastąpiło parę zmian na moim blogu: m.in. zrezygnowałem z wtyczki Google Analyticator na rzecz Ultimate GA. Na koniec należy jeszcze raz przeprowadzić porządki opisane na początku tego wpisu.

Pierwsza część wpisu o optymalizacji WordPress

 

Przeczytaj także

Komentarze: 2

Dodaj komentarz »

 
 
 

Bardzo dobry artykuł.

Ma może ktoś listę pluginów wraz z szacowanym zużyciem pamięci? Tak, aby można było wybrać te najmniej zasobożerne?

 

Odpowiedz

 

Dodaj komentarz

 
(nie będzie publikowany)
 
 
Komentarz
 
 

Dozwolone tagi XHTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

 
© 2009 - 2018 Vokiel.com
WordPress Theme by Arcsin modified by Vokiel