Kontynuując ostatnie wpisy dotyczące optymalizacji WordPressa pod kątem szybkości wczytywania strony opartej o ten CMS, postanowiłem poświęcić jeden cały wpis wtyczce W3 Total Cache. Większość użytkowników myśli, że wystarczy zainstalować wtyczkę zapomnieć. Jak się za chwilę przekonacie, drobna różnica w standardowej konfiguracji, może przynieść wielkie rezultaty w postaci lepszego wyniku parametru PageSpeed, czyli wzrostu prędkości wczytywania strony, co za tym idzie lepszej optymalizacji pod kątem SEO i pozytywnych wrażeń użytkowników podczas przeglądania naszego serwisu.
W3 Total Cache, nie tylko do cache-owania
Wtyczka W3 Total Cache jak mało która potrafi bardzo dużo, a cały potencjał można wycisnąć dopiero po jej odpowiednim skonfigurowaniu. Wtyczkę polubiłem tak na prawdę od drugiego wrażenia – najpierw ją miałem, ale nie za bardzo zagłębiałem się w jej konfigurację. Gdy okazało się że mój PageSpeed jest bardzo niski uznałem, że wtyczka sobie nie radzi i zacząłem testować inne. Efekt był taki, że miałem wiele wtyczek, nie do końca skonfigurowanych, nie do końca działających, no i dalej nie do końca rozwiązujących mój problem. Postanowiłem wrócić do W3 Total Cache, i poświęcić trochę czasu na konfigurację wtyczki…
W niniejszym artykule skupiam się na darmowej wersji wtyczki W3 Total Cache, oraz na podstawowych ustawieniach (Page Cache | Minify | Database Cache | Browser Cache), które pozwolą na podniesienie SpeedRank-u w Google Insights do przyzwoitego poziomu ~90 punktów.
Sprawdzenie kompatybilności
Pierwszy krok na drodze do zoptymalizowania strony przy użyciu tej wtyczki to Compatibility Test
, czyli sprawdzenie kompatybilności wtyczki z serwerem, na którym znajduje się nasza strona.
Aby wywołać test należy przejść do Performance → Dashboard, i na górze wcisnąć guzik Compatibility Test
. W nowo-otwartym oknie pod legendą możemy sprawdzić jakie moduły serwera są potrzebne i które obsługuje nasz serwer. U mnie wygląda to następująco:
Server Modules & Resources:
- Plugin Version:
0.9.3
- PHP Version:
5.3.24
; - Web Server:
Apache
- FTP functions:
Installed
(required for Self-hosted (FTP) CDN support) - Multibyte String support:
Installed
(required for Rackspace Cloud Files support) - cURL extension:
Installed
(required for Amazon S3, Amazon CloudFront, Rackspace CloudFiles support) - zlib extension:
Installed
(required for compression support) - Opcode cache:
Not installed
- Memcache extension:
Not installed
- HTML Tidy extension:
Installed
(required for HTML Tidy minifier suppport) - Mime type detection:
Installed (Fileinfo)
(required for CDN support) - Hash function:
Installed (hash)
(required for NetDNA / MaxCDN CDN purge support) - Safe mode:
Off
- Open basedir:
Off
- zlib output compression:
Off
- set_time_limit:
Available
- mod_deflate:
Not detected
(required for disk enhanced Page Cache and Browser Cache) - mod_env:
Not detected
(required for disk enhanced Page Cache and Browser Cache) - mod_expires:
Not detected
(required for disk enhanced Page Cache and Browser Cache) - mod_headers:
Not detected
(required for disk enhanced Page Cache and Browser Cache) - mod_mime:
Not detected
(required for disk enhanced Page Cache and Browser Cache) - mod_rewrite:
Not detected
(required for disk enhanced Page Cache and Browser Cache) - mod_setenvif:
Not detected
(required for disk enhanced Page Cache and Browser Cache)
Najważniejsze to zwrócenie uwagi na pozycje, które nie są zainstalowane, bo przy konfiguracji wtyczki nie będziemy mogli skorzystać z opcji wymagających niektórych modułów zainstalowanych na serwerze.
Teraz zamknij okno z testem. Druga przydatna tutaj rzecz, to guziki znajdujące się obok przycisku wywołującego test:
- empty all cache – pamiętaj, aby po każdej zmianie ustawień wtyczki, aby sprawdzić różnicę w testach mierzących wydajność witryny, wyczyścić całą pamięć podręczną
- guziki czyszczące poszczególne rodzaje cache, które będą aktywne w zależności od tego jakie rodzaje cache mamy „uruchomione”
Dostęp do tych opcji jest możliwy również z poziomego, górnego toolbara WordPress – bardzo wygodne przy testowaniu różnych ustawień.
Ustawienia ogólne
W ustawieniach ogólnych (General Settings) znajdziemy 14 sekcji, z poziomu których możemy włączać lub wyłączać poszczególne moduły optymalizujące. Poniżej znajduje się opis najważniejszych, tych na które powinieneś zwrócić uwagę w pierwszej kolejności. Zaczynajmy!
Browser Cache
Po zainstalowaniu pluginu tylko moduł Browser Cache jest aktywny. Browser cache, to pamięć podręczna przeglądarki internetowej. Ten rodzaj cache pomaga przyspieszyć działanie witryny po stronie klienta. Działanie polega na ustawieniu odpowiednich reguł określających typy plików w .htaccess, które powinny być zapisywane w pamięci podręcznej przeglądarki. Zapisanie tych stałych elementów strony po stronie klienta, w pamięci podręcznej przeglądarki sprawia, że witryna pomiędzy przeładowywaniami ładuje jest szybciej, bo część zasobów znajduje się już po stronie klienta.
W zakładce Performance → Browser Cache znajdziemy wiele opcji określających zachowanie plików znajdujących się w pamięci podręcznej. Jeżeli w PageSpeed Insights mamy problemy w sekcji Leverage Browser Caching, to już tutaj znajdziemy przynajmniej część rozwiązań.
W każdej z 4 dostępnych w zakładce sekcji na pewno musimy zaznaczyć opcje:
- Set Last-Modified header – ustawia nagłówek z informacją o ostatniej modyfikacji pliku
- Set expires header – usuwa błędy mówiące o tym, że pliki w pamięci podręcznej nie mają zaznaczonego czasu przedawnienia (expiration not specified)
- Enable HTTP (gzip) compression – usuwa część błędów związanych z sekcją Minify Resources.
Po włączeniu opcji Set Expires header, może okazać się, że problem został rozwiązany połowicznie. PageSpeed Insights często pokazuje błędy mówiące o tym, że czas przechowywania plików w pamięci podręcznej jest za krótki dlatego w większości przypadków należy zwiększyć wartość w Expires header lifetime – rekomendacja Insights, to o ile dobrze pamiętam, jest 60*60*24*7 sekund, czyli dokładnie tydzień, ale w zależności od tego jak popularny jest nasz blog i jak często pojawia się na nim coś nowego trzeba tą wartość dostosować do strony.
Pozostałe opcje należy ustawić według indywidualnych potrzeb .
Page Cache
Inaczej pamięć podręczna dysku twardego – przyspiesza dostęp do wolnej pamięci masowej. Dzięki tej opcji możemy uzyskać najlepsze efekty w poprawianiu prędkości działania strony – dzięki włączeniu tej opcji możemy liczyć nawet na dziesięciokrotny wzrost wydajności!
Na czym polega cache-wanie stron? W skrócie i uproszczeniu mówiąc… gdy strona jest renderowana przez interpreter PHP, do przeglądarki wysyłany jest kod HTML. Plugin cache-ujący zapisuje w pamięci wynik działania skryptu PHP w postaci przetworzonego, gotowego do wyświetlenia użytkownikom, czystego kodu HTML. Dzięki takiej operacji następny użytkownik nie musi już czekać na ponowne wygenerowanie strony przez interpreter PHP, a dostaje gotowy wynik z zapisanego wcześniej pliku HTML.
Aby włączyć moduł, należy zaznaczyć okienko obok napisu Enable, a następnie z poniższej listy wybrać sposób cachowania – w zależności od rodzaju i konfiguracji serwera, mamy więcej lub mniej dostępnych opcji. Ja posiadam serwer współdzielony więc mogę wybrać pomiędzy Disk i Disk Enhanced. Druga opcja jest rekomendowana. Zapisujemy zmiany i przechodzimy do kolejnej strony konfiguracyjnej Performance → Page Cache.
Tutaj trzeba chwilę pomyśleć aby dostosować ustawienia do strony. Generalnie domyślne ustawienia raczej wystarczają.
Minify
Minify, to pozbywanie się białych znaków takich jak spacje, „entery” i tabulatory z kodu HTML, CSS i JavaScript. Usunięcie ich z kodu sprawia, że kod traci na swojej czytelności ale „waży” znacznie mniej. Moduł Minify w W3 Total Cache, pozwala także na łączenie wszystkich dołączanych do dokumentu HTML, skryptów JS i arkuszy z kodem CSS w pojedyncze pliki.
Tutaj sprawę można rozwiązać dwojako, albo możemy sami zdecydować jakie skrypty łączyć jak i gdzie „includować” je do szablonu, albo postawić na automatyczne działanie.
Uwaga, opcja wpływa na kolejność wczytywania skryptów na stronie, toteż istnieje pewne ryzyko, że po nierozważnej konfiguracji, na stronie mogą pojawić się pewne problemy, jak niedziałające pewne funkcjonalności, związane z niedziałającymi skrypty JavaScript na stronie.
Teraz wyjaśnię przykładową konfigurację. Wróć na chwilę do głównej zakładki pluginu Performance → Dashboard, i skocz do sekcji Minify. Włącz moduł, Minify mode ustaw na Auto, a resztę zostaw na domyślnych.
Następnie w zakładce Performance → Minify:
- General – zostaw domyślne ustawienia
- HTML & XML – zaznacz te opcje:
- Enable – włącza moduł minify dla kodu HTML i XML
- Inline CSS minification – usuwa białe znaki z kodu CSS osadzonego bezpośrednio w kodzie HTML
- Inline JS minification – jw. dla JS
- Line break removal – usuwa „entery”
- JS – uruchom moduł i sprawdź zachowanie strony. Jeżeli ustawienie minify sprawia problemy i teraz nie działa JavaScript na stronie, to przełącz opcję na Combine only, która sprawi, że ze skryptów JavaScript nie będą usuwane białe znaki, działanie js na stronie powinno wrócić do normy, a skrypty będą jedynie łączone w jeden plik. Dzięki temu w Insights przynajmniej zmniejszy się ilość błędów mówiących o skryptach blokujących renderowanie strony. W tym samym miejscu znajduje się lista wyboru Embed type, w której możemy określić rodzaj dołączania skryptów JS do strony. W Insights polecane rozwiązanie to asynchroniczne wczytywanie skryptów – dlatego powinieneś w pierwszej kolejności sprawdzić opcję non-blocking using 'async’. Jeżeli wystąpiły jakieś problemy na blogu spróbuj także non-blocking using JS. Przy takich ustawieniach w PageSpeed Insights powinny zniknąć wszystkie błędy mówiące o skryptach blokujących renderowanie strony (przynajmniej te dotyczące skryptów JS).
- CSS – uruchamiamy moduł i sprawdzamy czy na blogu wszystko wygląda poprawnie pod kątem CSS. Jeżeli jest ok zostawiamy, jeżeli wystąpiły jakieś problemy zaznaczamy dodatkowo opcję Combine only, czyli nie chcemy usuwać białych znaków z CSS, a jedynie połączyć je w jeden plik. Po ponownej analizie strony w PageSpeed Insights z sekcji Wyeliminuj blokujący renderowanie kod JavaScript i CSS z części strony widocznej na ekranie powinno zniknąć większość błędów.
I to dzisiaj wszystko, mam nadzieję że artykuł się spodobał i zachęciłem przynajmniej część z Was do przetestowania W3 Total Cache w nieco szerszej perspektywie.
Dzięki, teraz mam 91 punktów w wersji na desktopy (na komórki trochę mniej ale i tak korzystam z WPTouch) 😉
Dalej na żółto wyświetla się „Wyeliminuj blokujący renderowanie kod JavaScript i CSS z części strony widocznej na ekranie” ale i tak chyba nie jest najgorzej? 😉
Ciesze się, że się przydało. 🙂 Sprawdź o jakie pliki chodzi, jeszcze jedna wskazówka z mojej strony, a wiem że problem występuje – jeżeli używasz reklam adsense zadbaj o to, aby zmienić stary kod ładujący reklamy na asynchroniczny (co prawda obecnie jest to w wersji beta, ale jak widać u mnie działa).
Z reklam mam tylko nextclick 😉
Ważne, że niewiele brakuje do 100 🙂
Może później jeszcze to poprawię 😉
Tak czy siak, dzięki za artykuł 😉
Tak z ciekawości: mam 90 punktów, został tylko problem z „Wyeliminuj blokujący renderowanie kod JavaScript i CSS z części strony widocznej na ekranie”. Jak się z tym uporam zyskam pozostałe 10 punktów czy nie ma tak łatwo? 😉
Raczej nie, a na pewno nie do pełnej setki. Nie znam dokładnie Twojej sytuacji, ale prawie pewne jest, że na te pozostałe 10 punktów składa się kilkanaście mniejszych problemów… A to obrazki można zawsze lepiej skompresować, a to użyj obrazków w postaci sprite, zasoby na różnych serwerach, a tak w ogóle to dużo masz tych zewnętrznych zasobów itp. Insights samo w sobie nie pokazuje bardzo szczegółowych raportów, niestety. Ale są też inne narzędzia, spróbuj np GTmetrix.com, a zobaczysz że jeszcze sporo można zrobić 🙂
Cóż z pluginu można wycisnąć wiele i zdobyć sporo tak na prawdę darmowych punktów do PageSpeed. Poświęcić chwilę, wyeksportować ustawienia i jeżeli masz więcej blogów na podobnej konfiguracji – bezcenne, polecam 😀
W sumie w zenboxie jestem, zawsze chętnie pomagają. Może sami zaproponują, jak najlepiej skonfigurować ten plugin 😉
Dostałem odpowiedź, że wolą WP Super Cache – sprawdzony i mniej problemów 😉
Wiesz… o W3 Total Cache można powiedzieć to samo, że sprawdzony. W końcu te 2800 ocen nie jest z nieba 🙂 Zobacz, że ponad 2-krotnie więcej piątek na korzyść W3TC, a mniej więcej tyle samo jedynek 😀 Oczywiście, nie każdemu plugin musi przypaść do gustu, każdy może mieć inne potrzeby i swoje kryteria oceny. Ale najlepiej samemu sprawdzić i się przekonać.
Witam,
na wstępie napiszę, że jest to jedna z lepszych stron, na których można przeczytać coś o optymalizacji WP. Świadczy o tym 91/100 GPSI, brawo.
Chciałem odnieść się do W3 Total cache. W większości udało mi się zastosować wskazówki do „mojej” strony ale co do minify niestety nie.
Po włączeniu samej funkcji strona się błędnie ładuje, wszystko jest poprzestawiane i generalnie robi się kocioł co do układu 🙁
Po zastosowaniu reszty ustawień wspomniany bałagan nie znika.
Nie wiem czy kwestia tkwi w ustawieniach i jednak się da czy lepiej będzie zastosować jakąś inna wtyczkę do optymalizacji css i js?
Prośba o opinię
Witam, dzięki!
Moim zdaniem (obecnie) chyba nie ma nic lepszego niż W3TC i nawet w darmowej wersji można bardzo dużo z tej wtyczki wycisnąć. Kluczem jest prawidłowa konfiguracja i tutaj niestety w większości przypadków jest to kwestia indywidualna – na różnych serwerach może być zainstalowane różne oprogramowanie, od różnic w wersjach, po różne serwery http aż po brak niektórych modułów.
Moduł minify, jak wspominałem w artykule może czasem prowadzić do nieprawidłowego działania strony, np. nagle przestają działać skrypty JavaScript, czy jak w Twoim przypadku układ strony się sypie…
Wg. mnie nie ma sensu instalować dodatkowej wtyczki do tego celu, a lepiej przyjrzeć się dokładniej konfiguracji. Przetestuj ustawienia dla minify w opcji auto i manual. Jeżeli sypie się układ strony, to ja bym zaczął od sprawdzenia, czy validator pokazuje jakieś rażące błędy w kodzie strony i tutaj próbował najpierw podziałać. Może gdzieś w CSS brakuje średnika. 🙂
Jeżeli nie wiesz co produkuje wadliwe działanie, powinieneś włączyć minify w ustawieniach generalnych, i sprawdzać zachowanie strony włączając po kolei minify dla HTML / JS / CSS.
Jeżeli minify auto nie działa za dobrze, to spróbuj w trybie manualnym. Pamiętaj że nie wszystkie skrpyty da się 'minimalizować’, dlatego też trzeba to po kolei testować. Po każdej próbie czyść pamięć podręczną przeglądarki, i że z drugiej strony minify nie daje aż takiego potężnego boosta w wydajności (zależy oczywiście od strony), więc nie zawsze warto bawić się w to. 🙂
Pozdrawiam!
Dobrze napisany artykuł o optymalizacji i ustawieniach W3TC. WP Super Cache po prostu jest prostsze w konfiguracji. W3TC to taki automat/kombajnik do większych stron wg mnie.
Ja używam do optymalizacji różnych wtyczek i każda ma swoje plusy i minusy:
1. „W3 Total Cache” -do optymalizacji wszystkie, masa opcji, strony często odwiedzane, dużo zasobów, skryptów, css’ów. Minusy: Długi czas konfiguracji (można rzec zabawa metodą prób i błędów)
2. „WP Super Cache” -dość łatwa i szybka w konfiguracji, przydatne opcje czyszczenia cache po dodaniu/aktualizacji wpisu/strony. Minusy: czasami „gubi” ustawienia no i nie ma tylu opcji co W3TC
3. „Lite Cache” (uboższa wersja “Hyper Cache”) -dla mniejszych stron, rzadko aktualizowanych (trzeba ręcznie czyścić cache), prosta w konfiguracji
4. „Quick Cache (Speed Without Compromise)” -bardzo fajna prosta wtyczka, instalujesz włączasz, zapisujesz cachowanie i już wszystko już jest poustawiane. Jako minus to mało opcji i wersja PRO działająca z WordPress MultiSite płatna $15. Na plus to, że wersja Pro nie ma ograniczenia co do ilości domen.
Cześć, czaję, że post ma już ze 3 lata, ale mam pytanie odnośnie działania funkcji minify. Czy ta funkcja daje skompresowane i złączone pliki tylko na wyjściu (do użytkownika) czy też edytuje te pliki na serwerze?
Generuje nowe tymczasowe pliki. Oryginalne pliki są nieruszane.
Z tego co pamiętam jedynym plikiem, który jest zmieniany na serwerze jest
.htaccess
.Dzięki serdeczne za szybką odpowiedź!
Miłego dnia! 🙂
polecam sprawdzić jeszcze wielkość grafik i ilość wtyczek w panelu WP 😉