Wdrożenie Omnibusa w sklepie na WooCommerce (kurs)

Jakieś 3-4 miesiące temu na Webinsider.pl i kilku innych stronach rozpocząłem „wielki test bezpłatnych wtyczek cache” do WordPressa. W trakcie tego testu miałem wybrać kilka moim zdaniem najlepszych, by opisać je w zestawieniu podobnym do poradnika dotyczącego walki ze SPAMem w komentarzach (WordPress). Jednak w tracie testu szybko się okazało, że większość wtyczek sprawia jakieś problemy – mniejsze, lub większe, ale jednak. Czasem były to jakieś niuanse związane z prawidłową konfiguracją, innym razem problemy z prawidłowym wyświetlaniem niektórych elementów strony. W każdym razie po krótszych lub dłuższych testach kolejne wtyczki wylatywały z zestawienia, aż w końcu stwierdziłem, że zamiast „wielkiego testu” przedstawię jedną wtyczkę, którą właściwie wystarczy tylko włączyć. Można, ale nie trzeba konfigurować, by wszystko działało jak należy…

Cache Enabler, czyli prosty i skuteczny cache w WordPressie

Decyzja, by wpis ten ograniczyć tylko do jednej wtyczki (Cache Enabler od KeyCDN) była dość łatwa – pozostałe wtyczki albo z jakichś przyczyn sprawiały problemy na niektórych stronach, albo ich prawidłowa konfiguracja, by uniknąć problemów, czy też umożliwić prawidłowe działanie niektórych/innych wtyczek (np. WooCommerce) często wymagała przetestowania masy ustawień.

A uznałem, że bardziej zaawansowani z Was, co mieliby szansę wycisnąć ostatnie soki z tego typu kombajnów, zapewne już je znają, a do tego w internecie jest pełno tego typu zestawień – często z bardzo szczegółowymi raportami, i pewnie nie napisałbym wiele/nic nowego na ten temat…

Dodatkowo w takim porównaniu/zestawieniu wielu (tego typu) wtyczek być może uciekłaby Wam ta, o której postanowiłem dziś napisać.

Prosta i skuteczna

Wtyczka Cache Enabler ujęła mnie na tyle prostą konfiguracją, że w wielu przypadkach właściwie nie trzeba było nic konfigurować – testowaliśmy wtyczkę np. na instalacji WordPress Multisite, gdzie na jednej instalacji WordPressa działa aktualnie ponad 80 stron, i cała konfiguracja sprowadziła się właściwie tylko do zainstalowania i uruchomienia wtyczki centralnie (tylko na jednej stronie wymagana była zmiana ustawień – dodanie kilku stron do wyjątków, by nie były keszowane).

Ustawienia wtyczki

W ustawieniach wtyczki znajdziecie chyba tylko niezbędne elementy/opcje, ale dzięki temu wdrożenie keszowania na stronie powinno być ekstremalnie szybkie, a zarazem nie powinno sprawić problemów nawet mniej doświadczonym właścicielom stron:

keycdn_cache-enabler_wordpress-plugin_ustawienia01

Znajdziemy tu m.in. czas, po jakim ma wygasać cache (0, jeśli sam nigdy ma nie wygasać), czy opcje związane z czyszczenie całego cache (zamiast powiązanych elementów) po publikacji nowego postu/wpisu, czy gdy pojawi się jakiś komentarz. Znalazła się tu też opcja do wstępnej kompresji keszowanych stron do formatu gzip.

Być może dla niektórych z Was ciekawą opcją będzie wsparcie dla grafiki w formacie WebP, czy dla standardu HTTP/2. Do tego dochodzi jeszcze pole na wpisanie ID stron lub postów, które chcemy wykluczyć z keszowania, i ew. wybór minimalizacji HTML lub HTML + JavaScript.

Czyszczenie cache

Z poziomu panelu zarządzania WordPressem cache możemy wyczyścić ręcznie za pomocą linku „clear cache” na górnej belce, jak i również – co moim zdaniem może być jednak trochę mylące, i być może warto to zmienić – w przypadku skorzystania z przycisku „zapisz zmiany” na ekranie ustawień wtyczki (obok przycisku jest stosowna informacja, ale jednak…).

Oczywiście cache wyczyścimy też korzystając z ustawienia „cache expiry”, choć moim zdaniem w większości przypadków jest to raczej zbyteczna opcja, i śmiało można wstawić tam cyfrę zero.

Aktywacja keszowania w wp-config.php

Pamiętajcie, by dodać do pliku konfiguracyjnego WordPressa (wp-config.php) linijkę:

define('WP_CACHE', true);

Dzięki czemu aktywujecie obsługę mechanizmu odpowiedzialnego za keszowanie w WordPressie (advanced-cache.php).

Ustawienia zaawansowane

Jeśli jednak jesteście fanami większej integracji w to, co i jak keszuje wtyczka tego typu, to możecie zajrzeć do dokumentacji wtyczki, gdzie znajdziecie również sekcję poświęconym dodatkowym/zaawansowanym ustawieniom dla webserwera Apache2 i Nginx.

Ustawienia dodatkowe dla Nginx

W przypadku korzystania z webserwera Nginx (akurat nie mam żadnego serwera z Apache2 pod ręką, ale podobną modyfikację można przeprowadzić również w tym przypadku) warto również lekko zmodyfikować plik konfiguracyjny wybranej domeny (vHosta) i zamiast standardowego wpisy typu:

location / {
try_files $uri $uri/ /index.php?$args;
}

dać choćby ten proponowany przez KeyCDN:

set $cache_uri $request_uri;

# bypass cache if POST requests or URLs with a query string
if ($request_method = POST) {
 set $cache_uri 'nullcache';
}
if ($query_string != "") {
 set $cache_uri 'nullcache';
}

# bypass cache if URLs containing the following strings
if ($request_uri ~* "(/wp-admin/|/xmlrpc.php|/wp-(app|cron|login|register|mail).php|wp-.*.php|/feed/|index.php|wp-comments-popup.php|wp-links-opml.php|wp-locations.php|sitemap(_index)?.xml|[a-z0-9_-]+-sitemap([0-9]+)?.xml)") {
 set $cache_uri 'nullcache';
}

# bypass cache if the cookies containing the following strings
if ($http_cookie ~* "comment_author|wordpress_[a-f0-9]+|wp-postpass|wordpress_logged_in") {
 set $cache_uri 'nullcache';
}

# custom sub directory e.g. /blog
set $custom_subdir '';

# default html file
set $cache_enabler_uri '${custom_subdir}/wp-content/cache/cache-enabler/${http_host}${cache_uri}index.html';

# webp html file
if ($http_accept ~* "image/webp") {
 set $cache_enabler_uri '${custom_subdir}/wp-content/cache/cache-enabler/${http_host}${cache_uri}index-webp.html';
}

location / {
 gzip_static on; # this directive is not required but recommended
 try_files $cache_enabler_uri $uri $uri/ $custom_subdir/index.php?$args;
}

Od razu warto ten kod do współdzielonego pliku konfiguracyjnego (Nginx Snippets), dzięki czemu będzie można go wykorzystać dla innych domen, a i ew. późniejsza zmiana/modyfikacja będzie szybsza/wygodniejsza.

Wtedy kod do dodania w pliku konfiguracyjnym domeny będzie wyglądał np. tak:

# ----- Ustawienia "location /" dla wtyczki WP KeyCDN Cahe Enabler -----
include snippets/wordpress-keycdn-cache-enabler.conf;
# ----- Ustawienia "location /" dla wtyczki WP KeyCDN Cahe Enabler -----

W tym przykładzie odpowiedni kod został zamieszony w pliku snippets/wordpress-keycdn-cache-enabler.conf – Wy oczywiście możecie skorzystać z własnej nazwy.

Dzięki temu, gdy np. z jakichś przyczyn zrezygnujecie z wtyczki, to zamiast ponownie modyfikować pliki konfiguracyjne wszystkich stron (WordPress + Cache Enabler) wystarczy w tym pliku wpisać:

location / {
try_files $uri $uri/ /index.php?$args;
}

I mimo, że jest to krok opcjonalny, to z moich testów wynika, że w dopiero po dodaniu tego kodu webserwer Nginx + PHP-FPM dostaje prawdziwego kopa.

Czy wtyczka działa?

By sprawdzić, czy wtyczka działa, czyli do przeglądarki trafiła skeszowana wersja strony wystarczy sprawdzić źródło strony – jeśli znajdziecie na samym dole jakąś linijkę podobną do tych, to znaczy, że dostaliście stronę z cache:

<!– Cache Enabler by KeyCDN @ 17.03.2016 18:04:21 (webp gzip) –>
<!– Cache Enabler by KeyCDN @ 17.03.2016 18:04:21 (webp) –>
<!– Cache Enabler by KeyCDN @ 17.03.2016 18:04:21 (html gzip) –>
<!– Cache Enabler by KeyCDN @ 17.03.2016 18:04:21 (html) –>

Oczywiście warto wcześniej się upewnić, że dana strona była już choć raz odwiedzana (choćby przez Was samych), by podczas tej operacji wtyczka zrzuciła ją do cache… ;-)

Zresztą to, że działa poznacie również po informacji (w ustawieniach wtyczki, jak i na głównej stronie panelu WordPressa) o ilości danych wykorzystywanych na potrzeby cache stron(y).

Test wydajności/szybkości

Z racji tego, że większość z Was zapewne szuka wtyczki cache do swojej stronie nie po to by tylko i wyłącznie miała prostą konfigurację, ale by działała, postanowiłem zrobić mały test – wybrałem całkiem rozbudowaną stronę na WordPressie, która działa na niedużym serwerze VPS, ale przy ruchu, jaki generuje wystarczającym (nawet ze sporym zapasem).

W ustawieniach domeny (vHosta) został użyty dodatkowy/opcjonalny kod dla serwera Nginx, bez niego różnice wprawdzie były, ale były dość niewielkie.

Test wykonałem za pomocą programu Apache HTTP server benchmarking tool, konkretnie polecenia:

ab -n 500 -c 10 http://adres-strony/

Wyniki – powtórzone kilkukrotnie – prezentowały się następująco:

Bez żadnej wtyczki cache:

Obciążenie CPU: 100%

Concurrency Level:      10
Time taken for tests:   209.773 seconds
Complete requests:      500
Failed requests:        0
Requests per second:    2.38 [#/sec] (mean)
Time per request:       4195.453 [ms] (mean)
Time per request:       419.545 [ms] (mean, across all concurrent requests)
Transfer rate:          117.96 [Kbytes/sec] received

Z wtyczką Cache Enabler:

Obciążenie CPU: 5-7%

Concurrency Level:      10
Time taken for tests:   17.030 seconds
Complete requests:      500
Failed requests:        0
Requests per second:    29.36 [#/sec] (mean)
Time per request:       340.591 [ms] (mean)
Time per request:       34.059 [ms] (mean, across all concurrent requests)
Transfer rate:          1463.36 [Kbytes/sec] received

Jak widać różnica jest znaczna – nie tylko w czasie, w jakim został wykonany test, czy ilości operacji na sekundę, ale co być może jeszcze istotniejsze – w obciążeniu procesora, jakie wygenerował testowy ruch.

Test został powtórzony kilkukrotnie, w różnych porach, i za każdym razem wyniki były podobne.

Cachify

Jak podają sami autorzy wtyczki Cache Enabler ich wtyczka bazuje na innej wtyczce – Cachify, napisanej przez Sergeja Müllera.

Niestety nie zdążyłem gruntownie przetestować wtyczki Cachify, przed trafieniem na Cache Enabler, ale krótki test na jednej ze stron nie wykazał jakichś problemów, a same ustawienia są dość podobne do ustawień wtyczki Cache Enabler:

wordpress_plugin_cachify_ustawienia01

Z pewnych względów raczej z tej dwójki zostanie ze mną Cache Enabler, ale zachęcam do samodzielnego przetestowania również wtyczki Cachify…

KeyCDN

Za wtyczką Cache Enabler stoi ekipa odpowiedzialna za usługę KeyCDN, więc można przypuszczać, że do keszowania naszej strony przyłożą się na tyle solidnie, by była to reklama dla ich głównej usługi…

I na razie to działa – bo wprawdzie każda moja strona działa z wykorzystaniem usługi Cloudflare (głównie ze względu na bardzo szybką obsługę zmian w strefie DNS, jak i dodatkowe bezpieczeństwo), to w przypadku projektu, który mam nadzieję, niebawem wystartuje, a gdzie prawdopodobnie będzie potrzebna usługa CDN w bardziej klasycznym/standardowym znaczeniu niż tylko Cloudflare, to prawdopodobnie skorzystam z usługi KeyCDN zamiast… ;-)

Przetestuj bezpłatnie (również) KeyCDN

Jeśli ktoś z Was chciałby przetestować nie tylko ich wtyczkę keszującą, ale również ich główną usługę (tak, mają dla niej również wtyczkę do WordPressa :-)), to możecie to zrobić bez ponoszenia jakichkolwiek kosztów (czy choćby podawania numeru karty kredytowej).

Konto testowe i dodatkowe 10 $ do wykorzystania

Możecie założyć konto testowe, gdzie otrzymacie 25 GB transferu (a dokładnie 1 $ do wykorzystania) na 30 dni – bez żadnych zobowiązań (nie musicie później nawet konta kasować).

Ale wystarczy, że założycie konto z tego linka, a dostaniecie dodatkowe 10 $ do wykorzystania, co zależnie od ruchu, jaki generuje Wasza strona, może Wam starczyć nawet na kilka miesięcy korzystania z usługi:

Jeśli nie wiecie jaki ruch generuje Wasza strona, to powiem tylko, że strona typu Webinsider (kilka tysięcy wyświetleń dziennie) generuje wg KeyCDN jakieś 25-35 GB ruchu, a więc 10 $ w takim przypadku starczyłoby na jakiś rok…

(!) Zgłoś błąd na stronie
Pomogłem? To może postawisz mi wirtualną kawę?
LUTy dla D-Cinelike (DJI Mini 3 Pro, DJI Avata, OSMO Pocket) od MiniFly
Wdrożenie Omnibusa w sklepie na WooCommerce
Jak (legalnie) latać dronem w Kategorii Otwartej
Wdrożenie Omnibusa w sklepie na WooCommerce (kurs)
Patryk
Wdrożenie Omnibusa w sklepie na WooCommerce (kurs)