PHP Academy · Lektion

OPcache: bytecode-cachning

Aktivera och finjustera OPcache för att eliminera kostnaden för upprepad skriptkompilering.

Lektion 2 av 413 steg

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

Viktiga 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 timestamps

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

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

Ofö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?

Gratis att börja

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

  1. Profilera PHP med Xdebug
  2. OPcache: bytecode-cachning
  3. Optimera databasfrågor
  4. Minneshantering och prestandatips
← Tillbaka till PHP Academy