PHP Academy · Lektion

Hukommelsesstyring og tips til ydeevne

Frigiv hukommelse tidligt, undgå store array-kopier, og brug generators til store datasæt.

Lektion 4 af 413 trin

Hukommelsesstyring og tips til ydeevne er en gratis PHP Academy-lektion på CoddyKit. Dette er lektion 4 af 4. Du kan læse hele lektionen gratis nedenfor — og derefter øve dig praktisk i browseren med en indbygget kodeeditor og en AI-vejleder, der er tilgængelig døgnet rundt. Den er en del af læringsforløbet i PHP Academy, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. PHP Academy-kurset indeholder 4 lektioner i alt.

PHP-hukommelseshåndtering

PHP bruger referencetælling med en cyklusindsamler til affaldsindsamling. Hver forespørgsel starter med en ny heap — langvarige processer (arbejdere, Horizon) kan ophobe hukommelseslækager.

memory_limit

Indstil en passende hukommelsesgrænse i php.ini. Hvis grænsen overskrides, udløses en fatal fejl.

# 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";

Frigiv store variabler

Frigiv hukommelse eksplicit, når store arrays eller objekter ikke længere er nødvendige i en lang 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 references

Generatorer til store datasæt

Brug generatorer til at behandle store filer eller forespørgselsresultater én række ad gangen uden at indlæse alt i hukommelsen.

<?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);
}

Undgå kopiering af store arrays

PHP bruger copy-on-write til arrays. Når du tildeler et array til en variabel, kopieres det ikke, før et af dem ændres. Overfør store arrays som referencer, når de skal ændres.

<?php
function processArray(array &$data): void {
    // & avoids a copy when the parameter is modified
}

Strengsammenkædning i løkker

Det er ineffektivt at opbygge en streng ved sammenkædning i en løkke, hvis strengen er meget stor. Brug et array og 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);

Caching af objektoprettelse

Det er dyrt at oprette instanser, især når konstruktørlogik indgår, i tætte løkker. Cache instanser, eller brug flyweight-objekter, hvor det er muligt.

Undgå gentagne funktionskald

Flyt funktionskald, der altid giver samme resultat, ud af løkker, når resultatet ikke ændrer sig fra iteration til iteration.

<?php
// Slow:
for ($i = 0; $i < count($items); $i++) { ... }

// Fast (count() called once):
$n = count($items);
for ($i = 0; $i < $n; $i++) { ... }

Finjustering af PHP-FPM-arbejdere

Konfigurér antallet af PHP-FPM-arbejdere ud fra den tilgængelige hukommelse og den forventede samtidighed. En grov tommelfingerregel er: workers = RAM / (gennemsnitligt hukommelsesforbrug pr. worker).

OPcache og forudindlæsning

Aktivér OPcache, som blev gennemgået i den forrige lektion, og forudindlæs framework-klasser, der bruges ofte. Det fjerner den ekstra tid pr. anmodning, der ellers bruges på fortolkning og kompilering.

Profilér først

Profilér altid, før du optimerer. Mikrooptimeringer i kode, der ikke udgør en flaskehals, spilder tid og gør koden mindre læsbar. Brug Xdebug eller Blackfire til at finde den faktiske del af koden, der bruger mest tid.

Opsummering

Brug generatorer til store datasæt. Fjern variabler, når du er færdig med dem. Undgå kopier af store arrays. Flyt konstante funktionskald ud af løkker. Profilér med Xdebug for at finde de reelle flaskehalse, før du optimerer.

Hurtigt tjek

Hvad er den største fordel ved PHP-generatorer til store datasæt?

Gratis at komme i gang

Lær PHP med en AI-underviser — gratis

Skriv og kør rigtig kode i din browser, få øjeblikkelig hjælp fra en AI-underviser døgnet rundt, og fortsæt, hvor du slap, på web eller i appen.

Kurser
49
Lektioner
195

Ofte stillede spørgsmål

Er lektionen “Hukommelsesstyring og tips til ydeevne” gratis?

Ja — hele teksten til “Hukommelsesstyring og tips til ydeevne” kan læses gratis her på nettet. Hvis du vil øve dig interaktivt med en indbygget kodeeditor og en AI-vejleder døgnet rundt og få adgang til resten af PHP Academy-kurset, skal du opgradere til CoddyKit PRO. PHP Academy-kurset indeholder 4 lektioner i alt.

Hvad lærer jeg i “Hukommelsesstyring og tips til ydeevne”?

Frigiv hukommelse tidligt, undgå store array-kopier, og brug generators til store datasæt. Du øver dig i PHP Academy med praktisk kode, som du kører direkte i browseren, og en AI-vejleder døgnet rundt besvarer dine spørgsmål, mens du arbejder dig gennem lektionen.

Skal jeg have erfaring for at begynde på PHP Academy?

Der kræves ingen tidligere erfaring. PHP Academy på CoddyKit er tilrettelagt for både begyndere og øvede, så du kan starte her eller fra begyndelsen og lære i dit eget tempo. Dette er lektion 4 af 4.

Hvor lang tid tager lektionen “Hukommelsesstyring og tips til ydeevne”?

De fleste CoddyKit-lektioner tager cirka 5–10 minutter. Hver lektion er kort og interaktiv, så du gør løbende fremskridt og kan fortsætte, hvor du slap – på både web og app.

Kan jeg skrive og køre kode i denne PHP Academy-lektion?

Ja. Alle PHP Academy-lektioner har en indbygget kodeeditor, så du kan skrive og køre rigtig kode direkte i din browser og få øjeblikkelig feedback fra AI – uden lokal opsætning.

Alle lektioner i dette kursus

  1. Profilering af PHP med Xdebug
  2. OPcache: Bytecode-caching
  3. Optimering af databaseforespørgsler
  4. Hukommelsesstyring og tips til ydeevne
← Tilbage til PHP Academy