LH.pl · Dział pomocy
W procesie optymalizacji stron www wykorzystywane są często różnego rodzaju mechanizmy pamięci podręcznej, czyli cache. Działają one na zasadzie tymczasowego przechowania w łatwo dostępnej formie pewnych danych lub informacji, które z dużym prawdopodobieństwem będą ponownie potrzebne w najbliższym czasie. Jednym z takich mechanizmów jest OPcache. Z tego artykułu dowiesz się, czym jest OPcache, jak działa i w jaki sposób wpływa na wydajność Twojej strony www.
Czym jest OPcache?
OPCache jest silnikiem pamięci podręcznej wbudowanym w PHP. Jego zadaniem jest przyspieszenie działania skryptów PHP poprzez przechowywanie w pamięci serwera prekompilowanego wcześniej kodu (tzw. opcode), aby nie było konieczne przetwarzanie skryptu przy każdym jego uruchomieniu.
Jak działa OPcache?
PHP jest językiem programowania interpretowanym. Oznacza to, że kod przy każdym uruchomieniu przechodzi przez złożony z kilku etapów proces analizy i przetwarzania, zanim zostanie przetłumaczony na zrozuumiały dla komputera kod maszynowy.
Na proces ten składają się tokenizacja, parsowanie oraz kompilacja do tzw. opcode, który jest pośrednią formą pomiędzy kodem zrozumiałym dla człowieka, a kodem maszynowym. Opcode jest następnie przekazywany do maszyny wirtualnej (Zend), która z kolei kompiluje go do faktycznego kodu maszynowego, a następnie wykonuje.
Jak zapewne się domyślasz, opisany proces jest czasochłonny. Aby uniknąć konieczności wielokrotnego powtarzania go w całości opcode zapisywany jest w pamięci podręcznej podczas pierwszego uruchomienia skryptu. Dzięki temu tokenizacja, parsowanie i kompilacja muszą zostać wykonane tylko raz. Schemat interpretacji kodu PHP z wykorzystaniem OPcache wygląda tak:
W wersji PHP 7.4 dodatkowo pojawiła się możliwość tzw. preloadingu opcache. Oznacza to, że wskazane skrypty mogą zostać wstępnie skompilowane i załadowane do OPcache, zanim jeszcze nastąpi ich pierwsze uruchomienie.
Jakie są korzyści z wykorzystania OPcache?
Wprowadzenie OPcache przyczyniło się do bardzo dużego wzrostu wydajności aplikacji napisanych w PHP. Wykorzystanie go pozwala na szybsze wykonywanie procesów i obsługę większej ilości żądań w tym samym czasie, przy jednoczesnym mniejszym obciążeniu procesora.
OPcache jest rekomendowanym rozwiązaniem w dokumentacji takich systemów jak:
- Shopware,
- Magento,
- Prestashop,
- Moodle.
W przypadku niektórych z nich dostępne są dokładne wytyczne odnośnie tego, jak powinien być skonfigurowany OPcache, aby osiągnąć najlepsze rezultaty w optymalizacji wydajności.
Jak sprawdzić, czy OPcache jest dostępny na moim serwerze?
Możesz sprawdzić, czy OPcache jest dostępny i włączony na Twoim hostingu lub serwerze poprzez stworzenie i wywołanie w przeglądarce funkcji phipinfo(). Od wersji PHP 5.5 jest on domyślnie zainstalowany i włączony.
OPcache powinien być widoczny na liście zainstalowanych rozszerzeń („Opcode Caching”):
Jak wyłączyć OPcache?
OPcache można wyłączyć poprzez dodanie odpowiedniego wpisu w pliku konfiguracyjnym PHP. Po stworzeniu pliku należy dodać do niego wpis:
opcache.enable=0
Aby sprawdzić, czy zmiana zadziałała możesz ponownie wywołać funckję phpinfo():
OPCache a inne mechanizmy cache
Możesz zastanawiać się, czy jeśli korzystasz z OPcache, to nadal potrzebujesz innych rodzajów pamięci podręcznej na Twojej stronie www, np. wtyczek cache w WordPress. Odpowiedź brzmi — tak. Różne rodzaje cache mogą działać niezależnie na różnych warstwach aplikacji.
OPcache przyspiesza działanie skryptów PHP poprzez przechowanie w pamięci podręcznej prekompilowanego opcode. Wtyczki cache w WordPress odpowiadają z kolei za tzw. page cache, czyli przechowywanie podstron i wpisów w postaci statycznych plików HTML. Obydwa te rodzaje pamięci podręcznej są ze sobą kompatybilne i mogą działać równocześnie.
Podsumowanie
PHP jako interpretowany język programowania mierzy się z wyzwaniami związanymi z wydajnością wynikającymi z konieczności ciągłego powtarzania procesu kompilacji kodu. Usprawnienia takie jak OPcache oraz OPcache preloading pozwalają na zwiększenie szybkości wykonywania skryptów, a co za tym idzie szybsze działanie napisanych w tym języku aplikacji np. WordPress.