Pengurusan Memori dan Petua Prestasi
Bebaskan memori lebih awal, elakkan salinan tatasusunan besar dan gunakan penjana untuk set data besar.
Pengurusan Memori dan Petua Prestasi ialah pelajaran PHP Academy percuma di CoddyKit. Ini ialah pelajaran 4 daripada 4. Anda boleh membaca keseluruhan pelajaran di bawah secara percuma — kemudian berlatih secara praktikal dalam pelayar menggunakan penyunting kod terbina dalam dan tutor kecerdasan buatan 24/7. Pelajaran ini merupakan sebahagian daripada laluan pembelajaran PHP Academy, dan kemajuan anda disegerakkan merentas web serta aplikasi CoddyKit. Kursus PHP Academy merangkumi sejumlah 4 pelajaran.
Pengurusan Memori PHP
PHP menggunakan pengiraan rujukan dengan pengumpul kitaran untuk pengumpulan sampah. Setiap permintaan bermula dengan timbunan baharu — proses yang berjalan lama (pekerja, Horizon) boleh mengumpulkan kebocoran memori.
memory_limit
Tetapkan had memori yang sesuai dalam php.ini. Melebihi had tersebut akan menghasilkan ralat maut.
# 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";Nyahset Pemboleh Ubah Besar
Bebaskan memori secara eksplisit apabila tatasusunan atau objek besar tidak lagi diperlukan dalam fungsi yang berjalan lama.
<?php
$data = loadLargeDataset();
processData($data);
unset($data); // free immediately, do not wait for end of scope
gc_collect_cycles(); // force garbage collection if circular referencesPenjana untuk Set Data Besar
Gunakan penjana untuk memproses fail besar atau hasil kueri satu baris pada satu masa tanpa memuatkan semuanya ke dalam memori.
<?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);
}Elakkan Menyalin Tatasusunan Besar
PHP menggunakan salin semasa tulis untuk tatasusunan. Menetapkan tatasusunan kepada pemboleh ubah tidak menyalinnya sehingga salah satu daripadanya diubah suai. Hantar tatasusunan besar melalui rujukan apabila perubahan diperlukan.
<?php
function processArray(array &$data): void {
// & avoids a copy when the parameter is modified
}Penggabungan Rentetan dalam Gelung
Membina rentetan dengan menggabungkannya dalam gelung tidak cekap untuk rentetan yang sangat besar. Gunakan tatasusunan dan 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);Penyimpanan Objek dalam Cache
Menghasilkan objek (terutamanya dengan logik pembina) dalam gelung padat memerlukan banyak sumber. Simpan objek dalam cache atau gunakan objek ringan jika boleh.
Elakkan Panggilan Fungsi Berulang
Pindahkan panggilan fungsi yang tetap ke luar gelung apabila hasilnya tidak berubah bagi setiap lelaran.
<?php
// Slow:
for ($i = 0; $i < count($items); $i++) { ... }
// Fast (count() called once):
$n = count($items);
for ($i = 0; $i < $n; $i++) { ... }Penalaan Pekerja PHP-FPM
Konfigurasikan bilangan pekerja PHP-FPM berdasarkan memori yang tersedia dan keserentakan yang dijangka. Peraturan kasar: workers = RAM / (purata penggunaan memori pekerja).
OPcache dan Pemuatan Awal
Dayakan OPcache (yang dibincangkan dalam pelajaran sebelumnya) dan muatkan awal kelas rangka kerja yang kerap digunakan. Ini menghapuskan overhed penghuraian dan kompilasi bagi setiap permintaan.
Lakukan Pemprofilan Dahulu
Sentiasa lakukan pemprofilan sebelum mengoptimumkan. Pengoptimuman mikro pada kod yang bukan titik kesesakan membazirkan masa dan mengurangkan kebolehbacaan. Gunakan Xdebug atau Blackfire untuk mencari laluan sebenar yang paling sibuk.
Ringkasan
Gunakan penjana untuk set data besar. Nyah tetapkan pemboleh ubah apabila selesai digunakan. Elakkan salinan tatasusunan besar. Pindahkan panggilan tetap ke luar gelung. Lakukan pemprofilan dengan Xdebug untuk mencari titik kesesakan sebenar sebelum mengoptimumkan.
Semakan Ringkas
Apakah manfaat utama penjana PHP untuk set data besar?
Pelajari PHP dengan tutor kecerdasan buatan — percuma
Tulis dan jalankan kod sebenar dalam pelayar anda, dapatkan bantuan segera daripada tutor kecerdasan buatan yang tersedia 24/7, dan sambung semula dari tempat anda berhenti di web atau dalam aplikasi.
- Kursus
- 49
- Pelajaran
- 195
Soalan Lazim
Adakah pelajaran “Pengurusan Memori dan Petua Prestasi” percuma?
Ya — teks penuh “Pengurusan Memori dan Petua Prestasi” boleh dibaca secara percuma di web ini. Untuk berlatih secara interaktif menggunakan penyunting kod terbina dalam dan tutor kecerdasan buatan 24/7, serta membuka kunci baki kursus PHP Academy, tingkat taraf kepada CoddyKit PRO. Kursus PHP Academy merangkumi sejumlah 4 pelajaran.
Apakah yang akan saya pelajari dalam “Pengurusan Memori dan Petua Prestasi”?
Bebaskan memori lebih awal, elakkan salinan tatasusunan besar dan gunakan penjana untuk set data besar. Anda berlatih PHP Academy menggunakan kod praktikal yang dijalankan terus dalam pelayar, manakala tutor kecerdasan buatan 24/7 menjawab soalan anda semasa anda mengikuti pelajaran.
Adakah saya memerlukan pengalaman untuk memulakan PHP Academy?
Tiada pengalaman terdahulu diperlukan. Pembelajaran PHP Academy di CoddyKit disusun untuk pelajar daripada peringkat pemula hingga lanjutan, jadi anda boleh bermula di sini atau dari awal dan belajar mengikut kadar anda sendiri. Ini ialah pelajaran 4 daripada 4.
Berapa lamakah pelajaran “Pengurusan Memori dan Petua Prestasi” diambil?
Kebanyakan pelajaran CoddyKit mengambil masa kira-kira 5–10 minit. Setiap pelajaran ringkas dan interaktif, jadi anda boleh membuat kemajuan secara berterusan dan menyambung tepat dari tempat anda berhenti di web atau aplikasi.
Bolehkah saya menulis dan menjalankan kod dalam pelajaran PHP Academy ini?
Ya. Setiap pelajaran PHP Academy menyertakan penyunting kod terbina dalam, jadi anda boleh menulis dan menjalankan kod sebenar terus dalam pelayar serta menerima maklum balas kecerdasan buatan serta-merta — tanpa memerlukan persediaan setempat.
Semua pelajaran dalam kursus ini
- Membuat Profil PHP dengan Xdebug
- OPcache: Caching Kod Bait
- Mengoptimumkan Pertanyaan Pangkalan Data
- Pengurusan Memori dan Petua Prestasi