Nodea — logo

OPcache

OPcache to wbudowany w interpreter PHP akcelerator, który przechowuje w pamięci współdzielonej skompilowany kod bajtowy skryptów (opcode). Dzięki temu PHP nie musi wczytywać, parsować i kompilować tych samych plików źródłowych przy każdym żądaniu — od drugiego wywołania serwer sięga po gotowy opcode prosto z pamięci RAM.

Jak działa OPcache?

Standardowo PHP jest językiem interpretowanym: przy każdym żądaniu odczytuje pliki .php, tłumaczy je na kod pośredni (opcode), a dopiero potem wykonuje. Ten etap kompilacji powtarza się w kółko, mimo że kod aplikacji zwykle się nie zmienia. OPcache przełamuje ten schemat — po pierwszej kompilacji zapisuje wynikowy opcode w pamięci i przy kolejnych wywołaniach pomija cały etap parsowania.

Bufor jest okresowo sprawdzany pod kątem zmian w plikach (na podstawie znacznika czasu), więc po aktualizacji kodu PHP automatycznie przekompiluje zmienione skrypty. W środowisku produkcyjnym często wyłącza się tę weryfikację (validate_timestamps=0), by uzyskać maksymalną wydajność, i ręcznie czyści cache przy wdrożeniu. Warto odróżnić OPcache od cache danych: Redis czy Memcached buforują wyniki i sesje, podczas gdy OPcache dotyczy wyłącznie skompilowanego kodu.

Zastosowanie w praktyce

OPcache to jeden z najskuteczniejszych i najprostszych sposobów przyspieszenia aplikacji PHP — potrafi skrócić czas generowania strony nawet dwu-, trzykrotnie, praktycznie bez zmian w kodzie. Zysk jest szczególnie widoczny w rozbudowanych systemach CMS i frameworkach, które przy każdym żądaniu ładują setki plików.

Na hostingu współdzielonym i w gotowych obrazach PHP OPcache jest zwykle włączony domyślnie, często w duecie z PHP-FPM. Na własnym VPS-ie administrator może dostroić rozmiar bufora i liczbę plików do skali aplikacji, co bezpośrednio przekłada się na krótszy czas odpowiedzi i mniejsze zużycie procesora.

Powiązane pojęcia

Najczęstsze pytania

Czy OPcache trzeba samodzielnie włączać?

Na większości hostingów i w standardowych obrazach PHP OPcache jest wbudowany i włączony domyślnie — wystarczy sprawdzić jego status w phpinfo. Na własnym serwerze warto dostroić parametry, zwłaszcza memory_consumption i max_accelerated_files, tak by pomieściły wszystkie pliki aplikacji. Zbyt mały bufor powoduje ciągłe usuwanie i ponowną kompilację skryptów, co niweczy korzyść.