Gestión de memoria y consejos de rendimiento
Libere memoria pronto, evite copiar matrices grandes y utilice generadores para conjuntos de datos extensos.
Gestión de memoria y consejos de rendimiento es una lección gratuita de PHP Academy en CoddyKit. Esta es la lección 4 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de PHP Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de PHP Academy incluye 4 lecciones en total.
Gestión de memoria de PHP
PHP utiliza el recuento de referencias con un recolector de ciclos para la recolección de basura. Cada solicitud comienza con un montón nuevo; los procesos de larga duración (workers, Horizon) pueden acumular fugas de memoria.
memory_limit
Establezca un límite de memoria adecuado en php.ini. Superarlo provoca un error fatal.
# 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";Liberación de variables grandes
Libere explícitamente la memoria cuando las matrices o los objetos grandes ya no sean necesarios dentro de una función de larga duración.
<?php
$data = loadLargeDataset();
processData($data);
unset($data); // free immediately, do not wait for end of scope
gc_collect_cycles(); // force garbage collection if circular referencesGeneradores para conjuntos de datos grandes
Utilice generadores para procesar archivos grandes o resultados de consultas fila por fila sin cargarlo todo en memoria.
<?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);
}Evitar la copia de matrices grandes
PHP utiliza copy-on-write para las matrices. Asignar una matriz a una variable no la copia hasta que se modifica una de ellas. Pase las matrices grandes por referencia cuando necesite modificarlas.
<?php
function processArray(array &$data): void {
// & avoids a copy when the parameter is modified
}Concatenación de cadenas en bucles
Construir una cadena concatenándola dentro de un bucle es ineficiente cuando las cadenas son muy grandes. Utilice una matriz y 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);Almacenamiento en caché de la creación de objetos
Instanciar objetos (especialmente cuando se ejecuta lógica del constructor) dentro de bucles estrechos resulta costoso. Almacene las instancias en caché o utilice objetos flyweight siempre que sea posible.
Evitar llamadas repetidas a funciones
Mueva fuera de los bucles las llamadas a funciones constantes cuando el resultado no cambie en cada iteración.
<?php
// Slow:
for ($i = 0; $i < count($items); $i++) { ... }
// Fast (count() called once):
$n = count($items);
for ($i = 0; $i < $n; $i++) { ... }Ajuste de los workers de PHP-FPM
Configure la cantidad de workers de PHP-FPM según la memoria disponible y la concurrencia prevista. Una regla aproximada es: workers = RAM / (uso medio de memoria por worker).
OPcache y precarga
Active OPcache (explicado en la lección anterior) y precargue las clases del framework que utilice con frecuencia. Esto elimina el coste de analizar y compilar el código en cada solicitud.
Perfile primero
Perfile siempre el código antes de optimizarlo. Las microoptimizaciones aplicadas a código que no constituye un cuello de botella hacen perder tiempo y reducen la legibilidad. Utilice Xdebug o Blackfire para encontrar la ruta crítica real.
Resumen
Utilice generadores para conjuntos de datos grandes. Libere las variables cuando haya terminado con ellas. Evite copiar arrays grandes. Mueva las llamadas constantes fuera de los bucles. Perfile con Xdebug para encontrar los cuellos de botella reales antes de optimizar.
Comprobación rápida
¿Cuál es la principal ventaja de los generadores de PHP para conjuntos de datos grandes?
Preguntas frecuentes
¿La lección «Gestión de memoria y consejos de rendimiento» es gratis?
Sí — el texto completo de «Gestión de memoria y consejos de rendimiento» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de PHP Academy, actualiza a CoddyKit PRO. El curso de PHP Academy incluye 4 lecciones en total.
¿Qué aprenderé en «Gestión de memoria y consejos de rendimiento»?
Libere memoria pronto, evite copiar matrices grandes y utilice generadores para conjuntos de datos extensos. Practicas PHP Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.
¿Necesito experiencia previa para empezar PHP Academy?
No se requiere experiencia previa. PHP Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 4 de 4.
¿Cuánto tiempo toma la lección «Gestión de memoria y consejos de rendimiento»?
La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.
¿Puedo escribir y ejecutar código en esta lección de PHP Academy?
Sí. Cada lección de PHP Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.
Todas las lecciones de este curso
- Perfilado de PHP con Xdebug
- OPcache: almacenamiento en caché de bytecode
- Optimización de consultas de base de datos
- Gestión de memoria y consejos de rendimiento