OPcache: bytecode-cachning
Aktivera och finjustera OPcache för att eliminera kostnaden för upprepad skriptkompilering.
OPcache: bytecode-cachning är en gratis lektion i PHP Academy på CoddyKit. Detta är lektion 2 av 4. Ni kan läsa hela lektionen gratis nedan och sedan öva praktiskt i webbläsaren med en inbyggd kodredigerare och en AI-handledare som är tillgänglig dygnet runt. Den ingår i lärvägen för PHP Academy, och Era framsteg synkroniseras mellan webben och CoddyKit-appen. Kursen i PHP Academy innehåller totalt 4 lektioner.
Så fungerar PHP normalt
Utan OPcache måste PHP vid varje förfrågan läsa .php-filen från disken, tolka den till en AST, kompilera den till opcodes (bytekod) och sedan köra opcodes.
Vad OPcache gör
OPcache lagrar kompilerade opcodes i delat minne. Vid efterföljande förfrågningar hoppar PHP över tolknings- och kompileringsstegen och går direkt till körningen.
Prestandapåverkan
OPcache ger vanligtvis 2–5 gånger högre genomströmning för PHP-applikationer utan att några kodändringar krävs.
Aktivera OPcache
OPcache ingår i PHP 5.5+ och är aktiverat som standard i många distributioner. Kontrollera med php -m | grep -i opcache.
# php.ini:
[opcache]
zend_extension=opcache.so
opcache.enable=1
opcache.enable_cli=0Viktiga OPcache-inställningar
Justera följande inställningar för produktion:
# 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
I produktion anger du validate_timestamps=0 för att inaktivera filsystemskontroller vid varje förfrågan – PHP använder då alltid de cachelagrade opcodes. Återställ cachen efter en driftsättning.
Återställa OPcache
Rensa cachen efter att du har driftsatt ny kod.
<?php
opcache_reset(); // from a PHP script
// Or restart PHP-FPM:
$ kill -USR2 $(cat /run/php-fpm.pid)opcache_get_status()
Fråga efter OPcache-statistik under körning för att övervaka träffgrad och minnesanvändning.
<?php
$status = opcache_get_status();
echo "Hit rate: ".$status["opcache_statistics"]["opcache_hit_rate"]."%";Förinläsning (PHP 7.4+)
OPcache läser in ramverksfiler i delat minne när servern startar, vilket eliminerar även kompileringskostnaden vid den första förfrågan för centrala klasser.
# php.ini:
opcache.preload=/srv/app/preload.php
opcache.preload_user=www-dataJIT-kompilering (PHP 8.0+)
PHP 8 introducerade JIT-kompilering (Just-In-Time) ovanpå OPcache, vilket omvandlar opcodes till inbyggd maskinkod. Den största nyttan uppstår vid processorintensiva uppgifter; nyttan är marginell för vanliga I/O-bundna webbapplikationer.
# php.ini:
opcache.jit_buffer_size=100M
opcache.jit=1255Oföränderliga klasser
OPcache kan dela internade strängar och oföränderliga klassdefinitioner mellan arbetarprocesser, vilket minskar minnesförbrukningen per process.
Sammanfattning
Aktivera OPcache i produktion med validate_timestamps=0. Rensa cachen efter driftsättningar med opcache_reset() eller genom att starta om PHP-FPM. Övervaka träffgraden med opcache_get_status().
Snabbtest
Vilken php.ini-inställning ska vara 0 i produktion för maximal OPcache-prestanda?
Lär dig PHP med en AI-lärare – gratis
Skriv och kör riktig kod i webbläsaren, få omedelbar hjälp av en AI-lärare dygnet runt och fortsätt där du slutade – på webben eller i appen.
- Kurser
- 49
- Lektioner
- 195
Vanliga frågor
Är lektionen ”OPcache: bytecode-cachning” gratis?
Ja – hela texten till ”OPcache: bytecode-cachning” kan läsas gratis här på webben. Om Ni vill öva interaktivt med en inbyggd kodredigerare och en AI-handledare som är tillgänglig dygnet runt och låsa upp resten av kursen i PHP Academy, kan Ni uppgradera till CoddyKit PRO. Kursen i PHP Academy innehåller totalt 4 lektioner.
Vad lär jag mig i ”OPcache: bytecode-cachning”?
Aktivera och finjustera OPcache för att eliminera kostnaden för upprepad skriptkompilering. Ni övar på PHP Academy med praktisk kod som körs direkt i webbläsaren, medan en AI-handledare som är tillgänglig dygnet runt svarar på Era frågor under lektionen.
Behöver jag någon erfarenhet för att börja lära mig PHP Academy?
Du behöver inga förkunskaper. Utbildningen i PHP Academy på CoddyKit är upplagd för allt från nybörjare till avancerade elever, så att du kan börja här eller från början och gå fram i din egen takt. Detta är lektion 2 av 4.
Hur lång tid tar lektionen ”OPcache: bytecode-cachning”?
De flesta CoddyKit-lektioner tar cirka 5–10 minuter. Varje lektion är kort och interaktiv, så att du gör stadiga framsteg och kan fortsätta precis där du slutade – på webben eller i appen.
Kan jag skriva och köra kod i den här PHP Academy-lektionen?
Ja. Varje PHP Academy-lektion innehåller en inbyggd kodredigerare, så att du kan skriva och köra riktig kod direkt i webbläsaren och få omedelbar AI-feedback – utan lokal installation.
Alla lektioner i den här kursen
- Profilera PHP med Xdebug
- OPcache: bytecode-cachning
- Optimera databasfrågor
- Minneshantering och prestandatips