OPcache: buforowanie kodu bajtowego
Włącz i dostrój OPcache, aby wyeliminować narzut wielokrotnej kompilacji skryptów
OPcache: buforowanie kodu bajtowego to bezpłatna lekcja PHP Academy na CoddyKit. To lekcja 2 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej PHP Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs PHP Academy zawiera 4 lekcji w sumie.
Jak zwykle działa PHP
Bez OPcache każde żądanie powoduje, że PHP odczytuje plik .php z dysku, analizuje go do postaci AST, kompiluje do kodów operacji (bajtkodu), a następnie wykonuje te kody.
Działanie OPcache
OPcache przechowuje skompilowane kody operacji we współdzielonej pamięci. Przy kolejnych żądaniach PHP pomija etapy analizy i kompilacji, przechodząc od razu do wykonywania kodu.
Wpływ na wydajność
OPcache zazwyczaj zapewnia 2–5-krotny wzrost przepustowości aplikacji PHP bez konieczności wprowadzania zmian w kodzie.
Włączanie OPcache
OPcache jest dołączony do PHP 5.5+ i w wielu dystrybucjach jest domyślnie włączony. Stan można sprawdzić za pomocą php -m | grep -i opcache.
# php.ini:
[opcache]
zend_extension=opcache.so
opcache.enable=1
opcache.enable_cli=0Najważniejsze ustawienia OPcache
Te ustawienia należy dostosować do środowiska produkcyjnego:
# php.ini:
opcache.memory_consumption=256 ; MB of shared memory
opcache.interned_strings_buffer=16 ; MB for interned strings
opcache.max_accelerated_files=20000 ; max scripts to cache
opcache.validate_timestamps=0 ; disable for production!
opcache.revalidate_freq=0 ; how often to check timestampsvalidate_timestamps=0
W środowisku produkcyjnym należy ustawić validate_timestamps=0, aby wyłączyć sprawdzanie systemu plików przy każdym żądaniu — PHP będzie zawsze używać zapisanych kodów operacji. Po wdrożeniu należy zresetować pamięć podręczną.
Resetowanie OPcache
Po wdrożeniu nowego kodu należy wyczyścić pamięć podręczną.
<?php
opcache_reset(); // from a PHP script
// Or restart PHP-FPM:
$ kill -USR2 $(cat /run/php-fpm.pid)opcache_get_status()
W czasie działania aplikacji można odczytywać statystyki OPcache, aby monitorować współczynnik trafień i zużycie pamięci.
<?php
$status = opcache_get_status();
echo "Hit rate: ".$status["opcache_statistics"]["opcache_hit_rate"]."%";Wstępne ładowanie (PHP 7.4+)
Wstępne ładowanie OPcache ładuje pliki frameworka do współdzielonej pamięci podczas uruchamiania serwera, eliminując narzut kompilacji nawet przy pierwszym żądaniu dla podstawowych klas.
# php.ini:
opcache.preload=/srv/app/preload.php
opcache.preload_user=www-dataKompilacja JIT (PHP 8.0+)
PHP 8 wprowadził kompilację JIT (Just-In-Time) działającą na bazie OPcache i przekształcającą kody operacji w natywny kod maszynowy. Największe korzyści są widoczne przy zadaniach intensywnie korzystających z procesora, a niewielkie przy typowych aplikacjach internetowych ograniczonych operacjami wejścia-wyjścia.
# php.ini:
opcache.jit_buffer_size=100M
opcache.jit=1255Niezmienne klasy
OPcache może współdzielić internowane ciągi znaków i niezmienne definicje klas między procesami roboczymi, zmniejszając zużycie pamięci przypadające na proces.
Podsumowanie
W środowisku produkcyjnym należy włączyć OPcache z ustawieniem validate_timestamps=0. Po wdrożeniach należy wyczyścić pamięć podręczną za pomocą opcache_reset() lub przez ponowne uruchomienie PHP-FPM. Współczynnik trafień można monitorować za pomocą opcache_get_status().
Szybki test
Które ustawienie php.ini powinno mieć w środowisku produkcyjnym wartość 0, aby uzyskać maksymalną wydajność OPcache?
Często zadawane pytania
Czy lekcja „OPcache: buforowanie kodu bajtowego” jest bezpłatna?
Tak — pełny tekst „OPcache: buforowanie kodu bajtowego” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu PHP Academy, przejdź na CoddyKit PRO. Kurs PHP Academy zawiera 4 lekcji w sumie.
Co nauczysz się w „OPcache: buforowanie kodu bajtowego”?
Włącz i dostrój OPcache, aby wyeliminować narzut wielokrotnej kompilacji skryptów Ćwiczysz PHP Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.
Czy potrzebuję doświadczenia, aby zacząć PHP Academy?
Nie wymagamy żadnego doświadczenia. PHP Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 2 z 4.
Ile czasu zajmuje lekcja „OPcache: buforowanie kodu bajtowego”?
Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.
Czy mogę pisać i uruchamiać kod w tej lekcji PHP Academy?
Tak. Każda lekcja PHP Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.
Wszystkie lekcje w tym kursie
- Profilowanie PHP za pomocą Xdebug
- OPcache: buforowanie kodu bajtowego
- Optymalizacja zapytań do bazy danych
- Zarządzanie pamięcią i wskazówki dotyczące wydajności