Geheugenbeheer en prestatietips
Maak geheugen vroeg vrij, vermijd grote arraykopieën en gebruik generators voor grote datasets.
Geheugenbeheer en prestatietips is een gratis PHP Academy-les op CoddyKit. Dit is les 4 van 4. Je kunt de volledige les hieronder gratis lezen en daarna in de browser praktisch oefenen met een ingebouwde code-editor en een AI-begeleider die 24/7 beschikbaar is. Deze les maakt deel uit van het leertraject PHP Academy. Je voortgang wordt gesynchroniseerd op het web en in de CoddyKit-app. De cursus PHP Academy bevat in totaal 4 lessen.
PHP-geheugenbeheer
PHP gebruikt referentietelling met een cycli-opruimer voor het opruimen van geheugen. Elke aanvraag begint met een nieuwe heap. Langlopende processen (werkprocessen, Horizon) kunnen geheugenlekken opstapelen.
memory_limit
Stel een geschikte geheugenlimiet in php.ini in. Als je deze overschrijdt, ontstaat er een fatale fout.
# 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";Grote variabelen vrijgeven
Maak geheugen expliciet vrij wanneer grote arrays of objecten binnen een lange functie niet meer nodig zijn.
<?php
$data = loadLargeDataset();
processData($data);
unset($data); // free immediately, do not wait for end of scope
gc_collect_cycles(); // force garbage collection if circular referencesGeneratoren voor grote gegevensverzamelingen
Gebruik generatoren om grote bestanden of queryresultaten rij voor rij te verwerken zonder alles in het geheugen te laden.
<?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);
}Grote arrays niet kopiëren
PHP gebruikt copy-on-write voor arrays. Een array aan een variabele toewijzen maakt pas een kopie wanneer een van beide wordt gewijzigd. Geef grote arrays door via een verwijzing wanneer wijziging nodig is.
<?php
function processArray(array &$data): void {
// & avoids a copy when the parameter is modified
}Tekenreeksen samenvoegen in lussen
Een tekenreeks samenstellen door deze in een lus samen te voegen is inefficiënt voor zeer grote tekenreeksen. Gebruik een array en 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);Objectcreatie cachen
Objecten instantiëren, vooral met constructorlogica, in strakke lussen is duur. Cache instanties of gebruik waar mogelijk flyweight-objecten.
Herhaalde functieaanroepen vermijden
Verplaats constante functieaanroepen buiten lussen wanneer het resultaat per iteratie niet verandert.
<?php
// Slow:
for ($i = 0; $i < count($items); $i++) { ... }
// Fast (count() called once):
$n = count($items);
for ($i = 0; $i < $n; $i++) { ... }PHP-FPM-werkprocessen afstellen
Configureer het aantal PHP-FPM-werkprocessen op basis van beschikbaar geheugen en verwachte gelijktijdigheid. Een grove regel: werkprocessen = RAM / (gemiddeld geheugengebruik per werkproces).
OPcache en vooraf laden
Schakel OPcache in, zoals behandeld in de vorige les, en laad veelgebruikte raamwerkklassen vooraf. Hierdoor vervallen de parseer- en compileeroverhead per verzoek.
Eerst profileren
Profileer altijd voordat je optimaliseert. Micro-optimalisaties op code die geen knelpunt vormt kosten tijd en verminderen de leesbaarheid. Gebruik Xdebug of Blackfire om het werkelijke hete uitvoeringspad te vinden.
Samenvatting
Gebruik generatoren voor grote gegevensverzamelingen. Maak variabelen ongedaan wanneer je ze niet meer nodig hebt. Vermijd kopieën van grote arrays. Verplaats constante aanroepen buiten lussen. Profileer met Xdebug om werkelijke knelpunten te vinden voordat je optimaliseert.
Korte controle
Wat is het belangrijkste voordeel van PHP-generatoren voor grote gegevensverzamelingen?
Leer PHP met een AI-tutor — gratis
Schrijf echte code en voer die uit in je browser, krijg direct hulp van een AI-tutor die 24/7 beschikbaar is en ga verder waar je gebleven bent op het web of in de app.
- Cursussen
- 49
- Lessen
- 195
Veelgestelde vragen
Is de les “Geheugenbeheer en prestatietips” gratis?
Ja — de volledige tekst van “Geheugenbeheer en prestatietips” kun je hier gratis op het web lezen. Als je interactief wilt oefenen met een ingebouwde code-editor en een AI-begeleider die 24/7 beschikbaar is, en de rest van de cursus PHP Academy wilt ontgrendelen, kun je upgraden naar CoddyKit PRO. De cursus PHP Academy bevat in totaal 4 lessen.
Wat leer ik in “Geheugenbeheer en prestatietips”?
Maak geheugen vroeg vrij, vermijd grote arraykopieën en gebruik generators voor grote datasets. Je oefent met PHP Academy door code rechtstreeks in de browser uit te voeren. Een AI-begeleider die 24/7 beschikbaar is beantwoordt je vragen terwijl je de les doorwerkt.
Heb ik ervaring nodig om met PHP Academy te beginnen?
Ervaring vooraf is niet nodig. PHP Academy op CoddyKit is opgebouwd voor beginners tot gevorderden, zodat je hier of bij het begin kunt starten en in je eigen tempo kunt leren. Dit is les 4 van 4.
Hoe lang duurt de les “Geheugenbeheer en prestatietips”?
De meeste lessen van CoddyKit duren ongeveer 5–10 minuten. Elke les is kort en interactief, zodat je gestaag vooruitgaat en op het web en in de app precies verdergaat waar je was gebleven.
Kan ik code schrijven en uitvoeren in deze les over PHP Academy?
Ja. Elke les over PHP Academy bevat een ingebouwde code-editor, zodat je rechtstreeks in je browser echte code kunt schrijven en uitvoeren en direct feedback van AI krijgt — lokale installatie is niet nodig.
Alle lessen in deze cursus
- PHP profileren met Xdebug
- OPcache: bytecodecaching
- Databasequery's optimaliseren
- Geheugenbeheer en prestatietips