Vad är "opcode cache"?
En opcode-cache är en mekanism som används för att förbättra prestandan hos PHP-applikationer genom att lagra kompilerad bytekod (opcode) av PHP-skript i minnet. När ett PHP-skript körs utan opcode-cache sker följande steg:
- Läsa in skriptet: PHP läser källkoden från disken.
- Parsa: Källkoden analyseras och bryts ner i mindre delar (tokens) för att kontrollera syntaxen.
- Kompilera: Koden omvandlas till bytekod (en mellanrepresentation).
- Exekvera: Bytekoden körs av PHP:s runtime.
Denna process upprepas varje gång ett PHP-skript begärs, vilket skapar en extra belastning, särskilt för ofta använda skript.
Hur fungerar opcode-cache?
En opcode-cache minskar denna belastning genom att:
- Lagra den kompilerade bytekoden i minnet efter den första körningen av ett skript.
- Återanvända den lagrade bytekoden vid senare körningar, vilket eliminerar behovet av att läsa, parsa och kompilera koden igen.
Fördelar med opcode-cache
- Snabbare körning: Skript exekveras snabbare eftersom parsing och kompilering hoppar över.
- Minskad CPU-belastning: Mindre resurser krävs eftersom processen blir effektivare.
- Bättre skalbarhet: Minskad overhead gör att servern kan hantera fler samtidiga förfrågningar.
Vanliga opcode-cache-lösningar
- OPcache: Inbyggd i PHP sedan version 5.5 och är den vanligaste lösningen idag.
- APC (Alternative PHP Cache): En äldre lösning som främst användes före OPcache blev standard.
- XCache och eAccelerator: Mindre vanliga tredjepartslösningar.
Exempel på konfiguration av OPcache
För att aktivera OPcache i php.ini:
opcache.enable=1
opcache.memory_consumption=128
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=10000
opcache.revalidate_freq=2
Våra samtliga webbhotellplaner har opcache aktiverat som standard.
Sammanfattning
En opcode-cache som OPcache är ett enkelt och effektivt sätt att förbättra PHP-prestanda genom att lagra kompilerad bytekod i minnet. Detta sparar resurser och snabbar upp exekveringen av skript, vilket är särskilt viktigt för webbplatser med hög trafik.