Jak przyspieszyć stronę na WordPress? Optymalizacja WP

Arkadiusz Meszka    23 marca 2019 | Ostatnia modyfikacja: 23 czerwca 2019

WordPress to najpopularniejszy system CMS Open Source na świecie. Około 30% stron internetowych opartych jest na tej platformie. Jest łatwy w obsłudze, ma mnóstwo przydatnych funkcji, stosunkowo łatwo jest programować na nim zmiany. W dodatku jest mnóstwo gotowych szablonów i wtyczek, które czasem mogą pozwolić zaoszczędzić mnóstwo czasu i środków.

Niemniej jednak system ten ma swoje wady. Jedną z nich jest to, że jest powolny, gdy stronę na WordPress postawimy w nieumiejętny sposób lub podejmiemy złe decyzje.

W tym artykule podpowiem wam, jak przyspieszyć stronę na WordPress i jakich błędów nie popełnić, aby strona mogła działać szybko i stabilnie.

Zleć stworzenie szablonu profesjonaliście – nie kupuj gotowego

Stworzono dotychczas dziesiątki tysięcy darmowych i płatnych szablonów pod system WordPress. Proste gotowe szablony zazwyczaj są w miarę wydajne, ale ciężko jest na nich samodzielnie cokolwiek zmienić. Rozbudowane gotowe szablony pozwalają nam na wiele rzeczy, ale kosztem wydajności.

Gotowy, rozbudowany szablon musi spełniać mnóstwo wymagań / nadawać się do wielu sytuacji, dlatego będzie znacznie cięższy, niż szablon szyty na miarę pod nasze potrzeby.

Dodatkowo, w przypadku wielu gotowych szablonów wyglądają one pięknie, ale tylko w wersji demo. Gdy przychodzi do uzupełnienia ich realną treścią, mogą pojawić się następujące problemy:

  • Zdjęcia nie komponują się z resztą designu. Te w wersji demo wyglądają lepiej, ale my mamy całkiem inne.
  • Choćby delikatna zmiana długości tekstu powoduje, że wszystko się rozlatuje
  • Sposób edycji jest bardzo skomplikowany i najczęściej odbywa się w kilku / kilkunastu miejscach w panelu.
  • Szablon wymaga do działania mnóstwa pluginów, dodatkowo tworzących potencjalne luki w bezpieczeństwie i spowalniających stronę. Nierzadko są to pluginy płatne i po pewnym czasie koszt utrzymania strony zaczyna wzrastać.

Jeśli chcecie zbudować stronę, gdzie nie zależy wam na dopracowaniu detali i będzie bardzo niewielki ruch i ma być jak najtaniej się da – wtedy gotowy szablon może być jedynym rozwiązaniem.

Jeśli zaś chcecie mieć stabilną, dobrze działającą stronę internetową opartą o WordPress, którą łatwo będzie obsłużyć i będzie bezpieczna – zdecydowanie lepiej wybrać autorski szablon.

Więcej na temat gotowych i autorskich szablonów znajdziecie tutaj.

Serwer, który Cię nie zawiedzie

Nie będę tutaj owijać w bawełnę – najlepszą firmą hostingową obecnie pod strony www oparte o WP (i nie tylko), w mojej opinii jest dhosting.pl

Jest to jedyna firma w Polsce wg mojej aktualnej wiedzy, która pozwala wykorzystywać niemal nieograniczone zasoby, a płaci się za to tylko wtedy, gdy te zasoby de facto wykorzystujemy. A w bazowym pakiecie jest aż 1 GB RAMu i bardzo duży przydział procesora. Strony na WP bardzo szybko chodzą na tym hostingu.

Więcej na temat tego, dlaczego warto mieć dhosting, znajdziecie w tym artykule:

Na co zwrócić uwagę, zamawiając hosting i jaki hosting wybrać?

Strona wielojęzyczna? Odradzam WPML

WPML (wpml.org) to najwolniejszy plugin, z jakim dotychczas miałem do czynienia. Szczególnie w połączeniu z dodatkami do WooCommerce i dodatkiem string translation. To połączenie to mieszanka wybuchowa. O ile uda Ci się uratować frontową część strony jakimiś pluginami od cache, o tyle zarządzanie stroną przez panel admina stanie się drogą przez mękę. Zadania, które dotychczas wykonywałeś w 10 minut, będziesz wykonywać pół godziny.

Zdecydowanie bardziej wydajnym rozwiązaniem jest Polylang w wersji darmowej lub płatnej. Nie zauważycie większej różnicy w prędkości działania strony, korzystając z Polylang.

Ciekawostka – wpiszcie sobie w Google frazę “wpml very slow” i podobne frazy. Znajdziecie mnóstwo wątków na forum WPML, gdzie ludzie skarżą się, że działa wolno i większość z nich to sprawy, które były długo przeciągane w czasie i ostatecznie nie zostały rozwiązane.

Zespół WPML prosił o aktualizacje tego i owego, zwiększenie pamięci dla WP, sprawdzenie z innym szablonem. Podziwiam cierpliwość niektórych osób, które robiły to wszytko tylko po to, aby się przekonać, że po prostu WPML nie jest zoptymalizowane 🙂

WPML w podstawowej wersji, bez połączenia z WooCommerce, bez użycia dodatku string translation, działa jeszcze jako tako. Ale wtedy niepotrzebnie wykupuje się ten dodatek, ponieważ są darmowe, lepsze i szybsze alternatywy.

Są oczywiście inne pluginy, które także pomagają stworzyć wersję wielojęzyczną, np. qtranslate, niemniej jednak dawno nie testowałem żadnego z nich. Mile widziane wypowiedzi w komentarzach na ten temat.

Cache – pamięć podręczna

Jest mnóstwo pluginów, które pozwalają uruchomić pamięć podręczną. Jak dla mnie najlepiej sprawdza się WP Fastest Cache. Równie dobrze działa WP Super Cache. Bardzo popularnym pluginem jest także W3 Total Cache, niemniej jednak w moim przypadku się nie sprawdził. Uruchamiałem go na 3 stronach internetowych i na wszystkich trzech odnotowałem spowolnienie po zainstalowaniu i poprawnym skonfigurowaniu tej wtyczki (a powinno być oczywiście na odwrót).

Na serwerach LiteSpeed, takich jak wymieniony powyżej dhosting, bardzo dobrze sprawdza się wtyczka LiteSpeed Cache. Różnica w prędkości działania strony jest ogromna, gdy uruchomi się ten plugin. LiteSpeed Cache przyspieszy stronę również na innych serwerach, nie jest wymagany serwer LiteSpeed.

Technologię LiteSpeed oprócz wymienionego powyżej dhostingu obsługuje także firma JCHost. Mają oni ofertę bardzo szybkiego hostingu pod WordPress:

Hosting LiteSpeed pod WordPress

Ich serwery są świetnie zoptymalizowane i strony oparte na WordPress chodzą tam niemal tak szybko, jak strony bez systemu CMS. Cena za hosting również jest niewielka w stosunku do tego, jak szybko działa strona.

Pluginów do cache jest oczywiście znacznie więcej, niż te 4 wymienione powyżej. Te powyższe to wtyczki najbardziej popularne i często używane.

Gdy już korzystacie z takiej wtyczki, trzeba ją odpowiednio skonfigurować. Niech ten cache nie tworzy się za szybko i za dużo na raz. Jeśli np. korzystacie z funkcji preload w WP Fastest Cache, powinny się cache’ować 2-4 strony na minutę.

Czy korzystać z CDN (Content Delivery Networks) – z reguły nie zwiększa to wydajności na stronach, na których to testowałem. Warto uaktywnić wszelkie dostępne opcje cache’owania – browser cache, object cache itd. Warto również zminifikować pliki css i js oraz połączyć je. Niemniej jednak, zarówno przed uruchomieniem tego wszystkiego, jak i po, przetestujcie swoją stronę. Minifikowanie js oraz łączenie nierzadko powoduje błędy na stronie. Należy wtedy naprawić swój kod, albo wyłączyć tę opcję we wtyczce.

Skanery bezpieczeństwa, automatyczne backupy – niekoniecznie

Pluginy, które regularnie wykonują backup instalacji WP, mają tendencję do zawieszania się, spowalniania strony i wykonywania niepełnych backupów. Znacznie lepiej jest polegać na backupie wykonywanym przez firmę hostingową. W każdej porządnej firmie hostingowej macie dostęp do backupów – również w tej, o której wspomniałem wyżej.

Dostępne są backupy plików oraz bazy danych z ostatnich 2 dni. Jak potrzeba starszych, może być konieczność drobnej opłaty. Raz potrzebowałem backup bazy sprzed 7 dni i zapłaciłem za to 10 zł.

Analogicznie jest ze skanerami. Jeśli korzystacie z wtyczki, która ma zwiększyć bezpieczeństwo waszej instalacji WordPress, najważniejsze rzeczy to:

  • Zmiana prefixu w bazie danych z domyślnego na inny
  • Zmiana adresu logowania
  • Wykrywanie brute force
  • Mile widziany Firewall
  • Ochrona przed botami spamowymi
  • Wykrywanie, gdy ktoś np. poprzez formularz komentarzy próbuje wstrzyknąć złośliwy kod

Skanery, które regularnie będą przeszukiwać waszą instalację w poszukiwaniu złośliwego kodu, są bezużyteczne – chyba, że macie własny serwer VPS lub dedykowany i nie stosujecie żadnych systemów bezpieczeństwa.

Gdy WP jest na hostingu, nie na serwerze dedykowanym lub VPS, firma hostingowa z reguły wykrywa włamanie w takim samym tempie, w jakim wykryłby go skaner.

Jak najmniej pluginów

Jest wiele pluginów WP, które można zastąpić kilkoma linijkami kodu w szablonie. W takiej sytuacji znacznie bezpieczniej jest to właśnie zrobić. Każdy dodatkowy plugin to powierzenie bezpieczeństwa naszej strony osobie trzeciej. Musimy zaufać, że twórca pluginu wie, co robi i nie zostawił żadnej luki. Im większej liczbie osób / firm musimy to zaufanie powierzyć, tym większa szansa, że do włamania dojdzie prędzej czy później, nawet jeśli będziemy je na bieżąco aktualizować.

Ma to też związek z prędkością – wiele pluginów importuje własne style, własny kod js, często tego kodu jest dużo i jest on niepotrzebny. Nawet, jeśli za pomocą wtyczki cache łączymy te pliki w jeden, to i tak tego kodu w tym jednym pliku jest za dużo.

Warto także pamiętać, że czasami jeden plugin może zastąpić kilka innych. Dla przykładu – All in One Seo Pack pozwala nam zarówno ustawić istotne dla nas opcje związane z SEO, jak i wkleić kod śledzący Google Analitycs, włączyć social meta, wygenerować mapę strony, a nawet zablokować złośliwe boty.

Contact Form 7 – importuj kod tam, gdzie jest potrzebny

Wtyczka contact form 7 importuje swoje style i kod javascript na każdej podstronie serwisu, w którym jest zainstalowana. Jeśli używamy formularza kontaktowego np. tylko w zakładce “kontakt”, nie ma to sensu. Aby temu zapobiec, wystarczy w functions.php wpisać następujący kod:

add_filter( 'wpcf7_load_js', '__return_false' );
add_filter( 'wpcf7_load_css', '__return_false' );

Następnie w szablonie podstrony, na której jest umieszczony formularz kontaktowy, zastosować następujący kod:

<?php
    if ( function_exists( 'wpcf7_enqueue_scripts' ) ) {
        wpcf7_enqueue_scripts();
    }
 
    if ( function_exists( 'wpcf7_enqueue_styles' ) ) {
        wpcf7_enqueue_styles();
    }
?>

Dlaczego wspominam tutaj o Contact Form 7? Jest to najpopularniejsza wtyczka do tworzenia formularzy na WordPress i w moim doświadczeniu – najbardziej elastyczna. Szczególnie, jeśli zna się HTML / CSS / JS.

Optymalizacja obrazów

Najważniejsze jest to, aby obrazy były realnie takiego rozmiaru, w jakim są wyświetlane. Jeśli mamy listę artykułów na blogu, na tej liście miniaturki, ale te miniaturki mają np. 2000x2000px i są pomniejszone – jest to niepotrzebne spowolnienie strony.

Twórca waszego szablonu powinien zaprogramować go tak, aby miniatury w danym miejscu były dopasowane rozmiarowo do swojej przestrzeni (system WordPress je przytnie, trzeba tylko wgrywać odpowiednio duże obrazy i odpowiednio zaprogramować to w szablonie).

Pluginy optymalizujące obrazy też bywają przydatne, ale wystarczy wgrywać pliki w formacie jpg, zamiast png, zastosować się do tego powyżej i to już rozwiązuje wiele problemów. Pliki png są z reguły o wiele cięższe, dlatego warto stosować jpg. Oczywiście jest też format webp, który jest najbardziej wydajny, ale nie testowałem dotychczas rozwiązań z formatem webp.

WordPress Revisions

Kiedy aktualizujemy dany wpis lub stronę w panelu admina, zapisywana jest kopia poprzedniej wersji. W ten sposób, jeśli np. mamy podstronę “O nas” i w ciągu roku edytowaliśmy ją 20 razy, wszystkie 20 kopii przechowywanych jest w bazie danych. Przechowywanie tylu kopii danego wpisu jest moim zdaniem zbędne i niepotrzebnie obciąża bazę danych.

Można to domyślne działanie WordPressa w bardzo łatwy sposób zmodyfikować, aby przechowywał on w bazie np. 5 ostatnich wersji wpisu, zamiast wszystkich. Aby to zrobić, wystarczy w pliku wp-config.php w katalogu głównym WP, nad linią:

define('WP_DEBUG', false);

Wprowadzić kod:

define( 'WP_POST_REVISIONS', 5 );

Liczba w nawiasie odpowiada za to, ile kopii danego wpisu chcemy przechowywać. Możemy też całkowicie wyłączyć przechowywanie kopii, ale odradzam to robić – niejednokrotnie te kopie zapasowe pozwoliły mi zaoszczędzić mnóstwo czasu. Jeśli jednak chcesz to wyłączyć, należy użyć następującego kodu:

define('WP_POST_REVISIONS', false);

WP-Cron

WP Cron to przydatne narzędzie, jeśli chcemy stworzyć jakieś zadania wykonywane przez WordPress i nie mamy możliwości zdefiniowania zadań cron na serwerze (albo często zmieniamy serwer i definiowanie tych zadań na serwerze byłoby niewygodne).

Ma on jednak pewną wadę i czasem warto wyłączyć tę funkcję. Tą wadą jest oczywiście dodatkowe obciążenie serwera (potencjalne spowolnienie strony). WP-Cron uruchamia się za każdym razem, gdy ktoś odwiedza naszą witrynę. W przypadku kilkudziesięciu czy nawet kilkuset wejść dziennie, może to nie robić większej różnicy, ale gdy mamy kilka, kilkanaście lub więcej tysięcy wejść dziennie, może to robić drastyczną różnicę w wykorzystaniu zasobów serwera.

Zadanie WP-Cron sprawdza nie tylko, czy nie zdefiniowaliśmy jakichś zadań w szablonie czy wtyczkach, ale też sprawdza, czy nie została wydana nowsza wersja WP.

Jeśli zdecydujecie się, aby wyłączyć WP-Cron, można to zrobić następującym kodem w pliku wp-config.php:

define('DISABLE_WP_CRON', 'true');

Kod ten najlepiej umieścić po liniach odpowiedzialnych za łączenie z bazą danych, czyli w okolicach linii 38, po następującej linijce kodu:

define('DB_COLLATE', '');

Podsumowując

Artykuł ten prawdopodobnie będę rozszerzać w przyszłości o dodatkowe informacje. W tym momencie to najważniejsze wskazówki dotyczące zwiększenia wydajności strony opartej o WordPress. Mam nadzieję, że przydadzą się wam w waszej przygodzie z WordPressem.

Udostępnij wpis
1 Gwiazdka2 Gwiazdki3 Gwiazdki4 Gwiazdki5 Gwiazdek (6 głosów, średnia: 5,00 z 5)
Loading...

6 komentarzy

  1. robby pisze:

    Zgadzam się w 100 procentach, jeśli chodzi o WPML. Mam ten sam problem, czasem niektóre strony w panelu potrafią mi się wczytywać kilka minut i jest to wina WPML, które się zwiesza, ciągle powoduje zacinanie się strony. Masakra. Ale tyle pracy włożyłem w stronę, że nie opłaca mi się przechodzić na inny plugin, na szczęście rzadko dokonuję edycji.

    Ale też dodam, że nie dzieje się to zawsze. Czasem jest tak, że strona nagle zamula, wszystko się wczytuje po kilka minut, ale czasem chodzi w miarę szybko. Niemniej jednak powinno chodzić szybko cały czas, serwer mam bardzo mocny.

  2. lox pisze:

    Co do WPML, to ja mam podobny problem. Tzn. zauważyłem, że jak zaczynam edycję, to jest ok. Ale im więcej rzeczy zmienię, im więcej zapiszę, tym bardziej spowalnia wszystko. I po około 10 minutach zmian w panelu dochodzi do takiego momentu, że nic się nie da robić i trzeba zaprzestać i wrócić po jakimś czasie, np. po 15 minutach.

  3. Krzysiek pisze:

    WPML jest dość zasobożerny to prawda, ale tu też może być problem wąskiego gardła po stronie serwera, czy raczej dostępnych zasobów dla procesów.

    Odnośnie rozszerzeń cache, to warto się przyjrzeć wtyczce LiteSpeed Cache. Kombajn, który przy odpowiedniej konfiguracji potrafi dać niezłego kopa.

  4. garry pisze:

    Dzięki za wszystkie informacje w artykule. Posłuchałem twoich porad i strona w pomiarze prędkości na komputery skoczyła mi 25 punktów do góry, a na mobilnych o 22 punkty do góry. Po prostu super! Sporo też zawiniał w tej kwestii mój stary hosting, musiałem się przenieść – dziękuję również za wskazówki w tym temacie.

  5. łukasheq pisze:

    Ja już zrobiłem wszystko co się da, ale nadal strona mi wolno chodzi. To chyba przez gotowy szablon, pytałem 2 niezależnych ekspertów i napisali mi mniej więcej to, co Ty powyżej na temat szablonów.

    Mam właśnie taki szablon, na którym można zrobić wszystko, kilkadziesiąt całkiem innych wyglądów. Ale mimo szybkiego serwera, wtyczek od cache i optymalizacji, bardzo lekkich zdjęć, nadal w Google PageSpeed Insights wypada słabo i gołym okiem widać, że strona się długo wczytuje. Szczególnie poważny jest problem na mobilnej.

    Znajomy mi postawił za niewielkie pieniądze stronę na nim (1200 zł), ale chyba będą to pieniądze wyrzucone w błoto.

  6. lukasz pisze:

    To ja polecam jeszcze przetestować stronę pod kątem użycia ładowanych plików CSS i JS. Szczególnie w tym stronach opartych na gotowych szablonach. Bardzo dobre narzędzie znajdziecie w dev toolsach Chrome, nazywa się Coverage ( More tools -> Coverage). W kolumnie “Unused Bytes” można zobaczyć ile tak na prawdę kodu w danym pliku jest wykorzystywane na stronie. Gdy testowałem w ten sposób strony oparte na gotowych szablonach to okazało się czasami można było śmiało usunąć całe pliki (albo raczej pominąć podczas importu).

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *