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ść.
