Minneshantering och prestandatips
Frigör minne tidigt, undvik stora kopior av arrayer och använd generatorer för stora datamängder.
Minneshantering och prestandatips är en gratis lektion i PHP Academy på CoddyKit. Detta är lektion 4 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.
PHP-minneshantering
PHP använder referensräkning med en cykelsamlare för skräpsamling. Varje förfrågan börjar med ett nytt heap-minne – långvariga processer (arbetare och Horizon) kan samla på sig minnesläckor.
memory_limit
Ange en lämplig minnesgräns i php.ini. Om gränsen överskrids uppstår ett allvarligt fel.
# php.ini:
memory_limit = 256M
// Check at runtime:
echo memory_get_usage(true) / 1024 / 1024 . " MB";
echo memory_get_peak_usage(true) / 1024 / 1024 . " MB peak";Avallokera stora variabler
Frigör minne explicit när stora arrayer eller objekt inte längre behövs i en lång funktion.
<?php
$data = loadLargeDataset();
processData($data);
unset($data); // free immediately, do not wait for end of scope
gc_collect_cycles(); // force garbage collection if circular referencesGeneratorer för stora datamängder
Använd generatorer för att bearbeta stora filer eller frågeresultat en rad i taget utan att läsa in allt i minnet.
<?php
function readCsvLines(string $file): Generator {
$fh = fopen($file, "r");
while (($line = fgetcsv($fh)) !== false) {
yield $line;
}
fclose($fh);
}
foreach (readCsvLines("large.csv") as $row) {
importRow($row);
}Undvik att kopiera stora arrayer
PHP använder copy-on-write för arrayer. När en array tilldelas till en variabel kopieras den inte förrän någon av dem ändras. Skicka stora arrayer som referenser när de behöver ändras.
<?php
function processArray(array &$data): void {
// & avoids a copy when the parameter is modified
}Strängkonkatenering i loopar
Att bygga en sträng genom konkatenering i en loop är ineffektivt för mycket stora strängar. Använd en array och implode().
<?php
// Slow for large N:
$str = "";
foreach ($items as $item) $str .= $item->format()."\n";
// Faster:
$parts = [];
foreach ($items as $item) $parts[] = $item->format();
$str = implode("\n", $parts);Cachning av objektskapande
Att instansiera objekt (särskilt med logik i konstruktorn) i täta loopar är kostsamt. Cacha instanser eller använd flyweight-objekt när det är möjligt.
Undvik upprepade funktionsanrop
Flytta konstanta funktionsanrop utanför loopar när resultatet inte ändras mellan iterationerna.
<?php
// Slow:
for ($i = 0; $i < count($items); $i++) { ... }
// Fast (count() called once):
$n = count($items);
for ($i = 0; $i < $n; $i++) { ... }Finjustering av PHP-FPM-processer
Konfigurera antalet PHP-FPM-processer utifrån tillgängligt minne och förväntad samtidighet. En grov tumregel är: workers = RAM / (genomsnittlig minnesanvändning per worker).
OPcache och förladdning
Aktivera OPcache (som behandlades i föregående lektion) och förladda ramverksklasser som används ofta. Det eliminerar omkostnaden för parsning och kompilering vid varje begäran.
Profilera först
Profilera alltid innan ni optimerar. Mikrooptimeringar i kod som inte är en flaskhals slösar tid och försämrar läsbarheten. Använd Xdebug eller Blackfire för att hitta den faktiska heta kodvägen.
Sammanfattning
Använd generatorer för stora datamängder. Avsätt variabler när de inte längre behövs. Undvik kopior av stora arrayer. Flytta konstanta anrop utanför loopar. Profilera med Xdebug för att hitta de faktiska flaskhalsarna innan ni optimerar.
Snabbkontroll
Vilken är den största fördelen med PHP-generatorer för stora datamängder?
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 ”Minneshantering och prestandatips” gratis?
Ja – hela texten till ”Minneshantering och prestandatips” 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 ”Minneshantering och prestandatips”?
Frigör minne tidigt, undvik stora kopior av arrayer och använd generatorer för stora datamängder. 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 4 av 4.
Hur lång tid tar lektionen ”Minneshantering och prestandatips”?
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