🍪 Można ciasteczko?

Ta strona chce wykorzystywać pliki cookie do analizowania ruchu oraz mierzenia skuteczności i personalizacji reklam zgodnie z polityką prywatności. Zgadzasz się?

PORADNIKI

10 min. czytania

Co to jest OPCache i jak działa cache dla PHP?

Cache

Fot. Storyset

Czym jest OPCache i w jaki sposób działa? Jak włączyć na serwerze czy hostingu i ustawić krok po kroku? Jak korzystać z cache dla PHP?

Spis treści
Serwer

Czym jest OPCache i w jaki sposób działa? To rozwiązanie, dzięki któremu Twoja strona czy aplikacja internetowa mogą działać znacznie szybciej. Warto go wdrożyć, aby móc zaoferować potencjalnym klientom jeszcze wyższą jakość usług.

OPCache jest rozwiązaniem powszechnie stosowanym przez internetowych twórców. Jego zadaniem jest przyśpieszenie działania wszelkich skryptów napisanych w języku PHP. W praktyce więc realnie wpływa na wydajność Twojego miejsca w sieci. To z kolei przekłada się na rozwój internetowego biznesu. Może zapewnić Ci popularność wśród internautów, którzy docenią dobrze funkcjonujący serwis.

Aby jednak osiągnąć tak pozytywny skutek, musisz najpierw poprawnie wdrożyć silnik OPCache. Do tego natomiast wskazane jest pozyskanie jak najobszerniejszej wiedzy na jego temat. Właśnie dlatego przygotowaliśmy kompleksowy poradnik dotyczący tego rozwiązania. Dowiesz się z niego, czym jest i jak dokładnie działa OPCache. Poznasz ponadto sposób na sprawdzenie jego dostępności na Twoim serwerze oraz metody jego włączania i wyłączania.

Co to OPCache? Silnik cache PHP

Optymalizacja strony WWW wymaga stosowania różnego rodzaju cache’ów. Są to specjalistyczne mechanizmy pamięci podręcznej. Pozwalają na przechowywanie danych i informacji w przystępnych formach. Dzięki temu możliwe jest ich ponowne użycie bez potrzeby długiego oczekiwania na ich przywołanie. Dokładnie taką rolę odgrywa również OPCache, działający po stronie PHP.

OPCache służy do przechowywania prekompilowanego wcześniej kodu (tzw. opcode) w pamięci podręcznej. Jego zadaniem jest buforowanie skryptów PHP, co ma przyśpieszyć ich działanie. Dzięki temu nie ma ciągłej potrzeby przetwarzania wszystkich skryptów cały czas od nowa, po każdym ich uruchomieniu.

Opisywane rozwiązanie jest wbudowaną funkcją PHP. W praktyce oznacza to, że może być wykorzystywane zarówno w aplikacjach, jak i np.:

  • stronach internetowych,
  • portalach,
  • blogach,
  • sklepach internetowych,
  • galeriach online,
  • i innych.

Warunkiem działania OPCache jest korzystanie z PHP w wersji 5.5 lub późniejszej.

Jak działa cache dla PHP?

Aby dobrze zrozumieć, w jaki sposób działa OPCache, warto najpierw przybliżyć charakterystykę języka PHP. Jest to język programowania interpretowany, czyli przechodzący przy każdym uruchomieniu przez szereg etapów. Związane są one z zaawansowaną analizą i przetwarzaniem zawartości. Dzięki temu komputer jest w ogóle w stanie ją zrozumieć. Celem bowiem jest przetworzenie jej na kod maszynowy.

Po przejściu tokenizacji, parsowania oraz kompilacji, język PHP osiąga stan tzw. opcode. Dla ułatwienia można powiedzieć, że jest to etap pośredni. Komunikat przybiera wtedy formę między kodem zrozumiałym dla człowieka a maszynowym. Właśnie w takiej wersji trafia następnie do maszyny wirtualnej nazywanej Zend. Jej zadaniem jest przekompilowanie go do kodu maszynowego i wykonanie żądania.

Działanie OPCache pozwala przeprowadzić cały ten proces tylko raz. Nie ma dzięki temu konieczności jego powtarzania. W ten sposób wygenerowany opcode trafia do pamięci podręcznej już podczas pierwszego przypadku uruchomienia skryptu. W przyszłości więc – podczas ponownego otwarcia – nie dochodzi już do ponownej tokenizacji, parsowania i kompilacji. System przechodzi od razu do Zend i trafia do realizacji. Jak zapewne już się domyślasz, dzięki temu wykonywanie poleceń trwa zdecydowanie krócej. To z kolei pozytywnie wpływa na optymalizację aplikacji czy strony WWW. Przekłada się to na pozytywne doświadczenia użytkownika i pozytywną ocenę algorytmów Google.

Preloading OPCache

Począwszy od wersji PHP 7.4, możliwe jest wdrożenie dodatkowej opcji tzw. preloadingu OPCache. Działanie to polega na wstępnym skompilowaniu i umieszczeniu w OPCache wskazanych skryptów. Dzieje się to, zanim jeszcze dojdzie do ich pierwszego uruchomienia. W ten sposób możliwe jest poprawienie wydajności aplikacji nie tylko przy ponownym wykonaniu żądania. Działa ona szybciej już od pierwszej wizyty. Aby skorzystać z opcji preloadingu, opcja OPCache musi pozostawać włączona. W dalszej części artykułu znajdziesz instrukcję, jak wykonać to krok po kroku.

Czy warto włączyć silnik OPCache i dlaczego?

Skorzystanie z OPCache przyniesie szereg korzyści Twojej aplikacji czy stronie internetowej. Najogólniej mówiąc, zacznie ona po prostu działać szybciej. Co więcej, pozwoli to na obsługę większej liczby żądań w jednym momencie. Jednocześnie utrzymane zostanie mniejsze obciążenie procesora.

W ten sposób stworzysz rozwiązanie internetowe, lepiej przygotowane na obsługę odbiorców. W przypadku witryn krótszy proces wykonywania procesów wpłynie też pozytywnie na wyniki Core Web Vitals i pozycjonowanie (SEO). Algorytmy wyszukiwarek sprzyjają bowiem miejscom w sieci, które działają szybko, bez problemu i są przyjazne dla użytkowników. Im wyższe miejsce w wynikach wyszukiwania, tym większa szansa na generowanie ruchu. To natomiast prosta droga do poprawy wyników finansowych e-biznesu.

Czytaj: Jak przyspieszyć stronę WWW? Optymalizacja szybkości strony

Drugim argumentem przemawiającym za OPCachem jest jego łatwy proces instalacji i konfiguracji. Na wielu hostingach wdrożenie tego rozwiązania możliwe jest z poziomu konta użytkownika. Przez wszystko przeprowadzi Cię czytelny interfejs, z którego obsługą poradzą sobie nawet osoby bez większego doświadczenia w zarządzaniu witryną. Nie jest to skomplikowane zresztą również z poziomu pliku konfiguracyjnego PHP. Konfiguracja odbywa się natomiast z wykorzystaniem komend/opcji w php.ini.

Kolejna zaleta wynikająca z zastosowania OPCache to ułatwienie pracy programistom. Pojedynczy proces kompilacji skutkuje pominięciem kroku buforowania. To z kolei pozwala wprowadzań zmiany w kodzie PHP i natychmiast je widzieć. Buforowanie natomiast jest wymagane w niektórych innych językach, takich jak Java czy C#.

OPCache jest rozwiązaniem bardzo wszechstronnym. Rekomenduje się go w dokumentacji m.in.:

Czy OPCache przyśpieszy każdą stronę?

OPCache bez wątpienia bywa przydatny. W końcu każdemu właścicielowi strony czy aplikacji internetowej zależy na tym, by działała ona jak najlepiej. Szybkość w XXI wieku jest też istotną zaletą, na podstawie której rozwiązania online oceniają użytkownicy. Problem jednak w tym, że efektywność tego rozwiązania może być zależna od konkretnego przypadku.

Uruchomienie OPCache przynosi najbardziej satysfakcjonujące rezultaty w przypadku dość rozbudowanych projektów. Potężne portale i sklepy internetowe od razu po jego włączeniu odczują realną różnicę w prędkości działania. Problem jednak w tym, że przy niewielkich witrynach, czy tym bardziej wizytówkach, można w ogóle nie dotrzeć, że coś się zmieniło. Teoretycznie czas ulegnie skróceniu, różnica bywa jednak tak niewielka, że realnie niemalże nieodczuwalna. Wiele zależy ponadto od budowy danego miejsca w sieci i wykorzystanych do tego technologii. Mimo to natomiast zawsze warto uruchomić OPCache, nawet jeśli zysk ma być niewielki.

Jak sprawdzić dostępność OPCache na serwerze?

Znasz już OPCache i sposób jego działania od strony teoretycznej. Czas więc na odrobinę praktyki. Zanim przystąpimy do instalacji tego rozwiązania na serwerze, sprawdź najpierw, czy jest ono dla Ciebie w ogóle dostępne. Prawdopodobnie tak, bo działa z każdą wersją PHP od 5.5 (w tym PHP 8). Co więcej, w przypadku wielu hostingów jest automatycznie nie tylko zainstalowany, ale i włączony. Mimo to natomiast zawsze lepiej się upewnić. Sam proces weryfikacji natomiast nie należy do skomplikowanych i zajmuje zaledwie kilka minut.

Aby sprawdzić dostęp do OPCache, musisz wywołać funkcję phpinfo(). Żeby to zrobić, stwórz odpowiedni plik o treści <?php phpinfo(); ?> i zapisz go z rozszerzeniem .php, wgraj go na serwer i uruchom w przeglądarce adres URL pliku.

Zobacz też: Jak sprawdzić wersję PHP na hostingu? i Jak zmienić wersję PHP na hostingu na najnowszą?

Na ekranie powinna więc pojawić się tabela, w której znajdziesz szereg informacji o Twojej aktualnej wersji PHP. Zwróć szczególną uwagę na linijkę „Opcode Caching”. Jeśli OPCache jest włączony i działa, powinien mieć status „Up and Running”.

Instalacja OPCache krok po kroku

Co zrobić, jeśli OPCache nie jest automatycznie zainstalowany i uruchomiony na Twoim serwerze? W takim przypadku musisz wdrożyć go samodzielnie. Proces ten możesz zrealizować m.in. dla:

  • oprogramowania Apache na własnym serwerze VPS czy dedykowanym,
  • oprogramowania Nginx na własnym serwerze VPS czy dedykowanym,
  • z poziomu panelu administracyjnego udostępnionego przez hostingodawcę:

Pierwsza dwa przypadki są nieco bardziej skomplikowane. Wymagają bowiem dostępu administracyjnego, uruchomienia wiersza poleceń i używania komend. cPanel i DirectAdmin udostępniają natomiast przejrzyste interfejsy. Wprowadzisz w nich odpowiednie zmiany kilkoma kliknięciami.

Instalacja OPCache dla systemów z Apache

Aby włączyć OPCache w systemie z Apache, uruchom terminal lub wiesz poleceń. Następnie w otwartym oknie wprowadź polecenie:

apt-get install php-opcache -y

Krok drugi to przejście do edycji pliku php.ini (Co to jest PHP.ini? Jak skonfigurować?) i wprowadzenie:

nano /etc/php/8.2.4/apache2/php.ini

Gdzie 8.2.4 to aktualnie używana wersja PHP.

Na końcu dopisz:

opcache.enable=1
opcache.memory_consumption=128
opcache.max_accelerated_files=3000
opcache.revalidate_freq=200

Powyższe parametry możesz dowolnie modyfikować, w celu uzyskania jak najlepszych efektów. Znaczą one:

  1. opcache.enable=1:
    • Włącza lub wyłącza OPCache.
    • Wartość 1 oznacza, że OPCache jest włączony, podczas gdy 0 oznacza, że jest wyłączony.
  2. opcache.memory_consumption=128:
    • Określa maksymalną ilość pamięci RAM (w megabajtach), jaką OPCache może używać do przechowywania skompilowanych skryptów PHP.
    • W tym przypadku jest to 128 MB.
  3. opcache.max_accelerated_files=3000:
    • Określa maksymalną liczbę skryptów PHP, które mogą być przechowywane w pamięci cache.
    • W tym przypadku jest to 3000 skryptów.
  4. opcache.revalidate_freq=200:
    • Określa, jak często (w sekundach) OPCache powinien sprawdzać, czy skompilowane skrypty w pamięci cache są nadal aktualne w stosunku do ich źródłowych plików na dysku.
    • Wartość 0 oznacza, że OPCache będzie sprawdzać przy każdym żądaniu, czy skrypty są aktualne. W tym przypadku jest to co 200 sekund.

Po zapisaniu tych zmian zrestartuj serwer:

systemctl restart apache2

Po ponownym uruchomieniu możesz znów otworzyć w przeglądarce plik phpinfo. Status OPCache powinien ulec zmianie.

Instalacja OPCache dla systemów Nginx

Proces uruchamiania OPCache przebiega niemalże identycznie dla systemów z Nginx. W tym przypadku również uruchom terminal lub wiersz poleceń, a następnie przeprowadź instalację. Zainicjujesz ją poleceniem:

apt-get install php-opcache php-fpm -y

Następnie edytuj plik php.ini:

nano /etc/php/8.2.4/fpm/php.ini

Zamieniając 8.2.4 na używaną wersje PHP.

Na końcu pliku dopisz:

opcache.enable=1
opcache.memory_consumption=128
opcache.max_accelerated_files=3000
opcache.revalidate_freq=200

Podobnie jak w przypadku Apache, możesz modyfikować wartości tych parametrów.

Przeładuj usługi:

systemctl restart nginx
system restart php8.2.4-fpm

Instalacja OPCache w cPanel i DirectAdmin

Instalacja OPCache przebiega praktycznie identycznie zarówno w cPanel, jak i DirectAdmin. W obu przypadkach musisz najpierw zalogować się do swojego panelu klienta. Dane logowania powinien udostępnić Ci Twój hostingodawca.

Następnie przejdź do zakładki dotyczącej zmiany ustawień PHP. W obu systemach musisz wyszukać funkcję „Wybierz wersję PHP”, „Ustawienia PHP” lub podobną. Panele klienta mają różną budowę i nazewnictwo, zależnie od hostingodawcy. Nazwy przycisków czy sekcji mogą się więc nieznacznie różnić. Po kliknięciu w aktualną wersję PHP powinna pojawić się możliwość edycji ustawień PHP.

Zazwyczaj w tym momencie na ekranie wyświetla się lista dodatkowych opcji (modułów) i funkcji, z których możesz skorzystać. Znajdź wśród nich OPcache i zaznacz jako aktywny. Następnie zapisz zmiany i gotowe. Rozszerzenie zostanie pomyślnie włączone na Twoim serwerze (o ile do tej pory nie działało).

Jak włączyć preloading OPCache?

Wspominaliśmy wcześniej o preloadingu OPCache. Jego również możesz uruchomić z poziomu wcześniej wspominanego pliku php.ini. Wystarczy tylko, że otworzysz ten plik, a następnie wprowadzisz do niego komendę:

opcache.preload=preload.php

Fragment „Preload.php” może być dowolnym plikiem, który ma być uruchamiany podczas włączania serwera. Jego kod będzie ładowany do cache’a.

Jak wyłączyć OPCache?

Czasem administratorzy mają potrzebę wyłączenia OPCache. Możesz chcieć to zrobić, aby np. sprawdzić różnicę w wydajności swojej strony z i bez tego rozwiązania. W takim przypadku ponownie musisz przejść do pliku php.ini. Po jego otwarciu wprowadź odpowiednią komendę:

opcache.enable=0

Po jej zatwierdzeniu możesz sprawdzić, czy wszystko poszło zgodnie z planem. Zrobisz to, uruchamiając w przeglądarce phpinfo. Przy „Opcode Caching” powinien widnieć status „Disabled”.

OPCache a inne rozwiązania pamięci podręcznej

Pamięć podręczna (cache) przybiera różne formy, zawsze natomiast działa na podobnej zasadzie. Jest to mechanizm pozwalający na „zbieranie” i przechowywanie niektórych danych w odrębnej „części” pamięci. Realizowane jest to w taki sposób, by dało się je jak najszybciej wywołać. Istnieją dwa główne rodzaje takich rozwiązań:

Pierwszy z typów pozwala na zapisywanie i szybsze wczytywanie m.in.:

  • plików multimedialnych,
  • plików CSS,
  • logo,
  • struktur HTML,
  • i wielu innych.

Drugi może dotyczyć buforowania np.:

  • obiektów,
  • wynikowych plików HTML,
  • kodu operacji.

Korzystanie z OPCache i LiteSpeed Cache jednocześnie

Istnienie wielu typów pamięci podręcznej rodzi pytanie dotyczące ich wzajemnego oddziaływania na siebie. Warto natomiast podkreślić, że OPCache jest silnikiem „współpracującym” wyłącznie ze skryptami PHP. W praktyce oznacza więc to, że w żaden sposób nie wpływa on na rozwiązania skupiające się na ogólnej pamięci podręcznej witryn.

Przykładem jednego z nich może być tu LiteSpeed i jego wtyczka LiteSpeed Cache. W praktyce więc OPCache może bez problemu zostać uruchomiony w obrębie jednego serwera z tym rozszerzeniem. Nie powinny wyniknąć z tego żadne komplikacje.