0Pricing
PHP Academy · Lekcja

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=0

Najważ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 timestamps

validate_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-data

Kompilacja 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=1255

Niezmienne 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

  1. Profilowanie PHP za pomocą Xdebug
  2. OPcache: buforowanie kodu bajtowego
  3. Optymalizacja zapytań do bazy danych
  4. Zarządzanie pamięcią i wskazówki dotyczące wydajności
← Powrót do PHP Academy