Optimización del rendimiento de aplicaciones PHP: guía completa

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

Introducción



PHP sigue siendo uno de los lenguajes más populares para el desarrollo web: en él funcionan WordPress, Laravel, Symfony y millones de sitios. Sin embargo, con el aumento de la carga, el rendimiento de las aplicaciones PHP puede convertirse en un cuello de botella. La carga lenta de páginas no solo empeora la experiencia del usuario, sino que también reduce las posiciones en los resultados de búsqueda (Google tiene en cuenta Core Web Vitals).



En este artículo analizaremos métodos probados de optimización de PHP que ayudarán a acelerar tu aplicación sin tener que reescribir todo el código. Aprenderás sobre caching, configuración del intérprete, optimización de la base de datos y profiling.



1. Caching: el primer paso hacia la velocidad



El caching es la forma más eficaz de reducir el tiempo de respuesta. En lugar de ejecutar operaciones pesadas cada vez, guarda el resultado y entrégalo desde la caché.



1.1. OpCache (PHP 7/8)



PHP es un lenguaje interpretado: en cada solicitud compila el script a opcode (bytecode). OpCache guarda el opcode compilado en la memoria RAM, eliminando la necesidad de recompilar. Esto proporciona un aumento de rendimiento de hasta un 30–50%.



Cómo activarlo: Abre php.ini y asegúrate de que los parámetros estén configurados:



opcache.enable=1opcache.memory_consumption=128opcache.max_accelerated_files=10000opcache.revalidate_freq=2


Para producción, establece opcache.revalidate_freq=0 y limpia la caché manualmente al hacer el deploy.



1.2. Caching de datos (Redis / Memcached)



Si tu aplicación realiza consultas costosas a la base de datos o a APIs externas, utiliza almacenamiento en memoria.



Ejemplo con Redis:



<?php$redis = new Redis();$redis->connect('127.0.0.1', 6379);

$cacheKey = 'user_profile_' . $userId;$profile = $redis->get($cacheKey);

if (!$profile) { // Consulta costosa a la BD $profile = getUserProfileFromDB($userId); $redis->setex($cacheKey, 3600, serialize($profile)); // TTL 1 hora}

$profile = unserialize($profile);


1.3. Caching de HTML (Full Page Cache)



Para páginas estáticas o que se actualizan con poca frecuencia (blog, landing page), se puede cachear la salida HTML completa. En Laravel se hace a través de middleware, en Symfony mediante HTTP cache.



2. Optimización de consultas SQL y base de datos



A menudo, el cuello de botella de una aplicación PHP es la base de datos. Las consultas lentas consumen recursos del servidor.



2.1. Usa índices



Asegúrate de que las columnas utilizadas en WHERE, JOIN y ORDER BY tengan índices. Puedes verificarlo con EXPLAIN SELECT ....



Consulta mala (sin índice):



SELECT * FROM orders WHERE status = 'pending';


Consulta buena (con índice):



CREATE INDEX idx_orders_status ON orders (status);SELECT * FROM orders WHERE status = 'pending';


2.2. Evita las consultas N+1



Este es un error clásico de los ORM: obtener datos para cada registro en un bucle.



Problema (Laravel Eloquent):



$users = User::all();foreach ($users as $user) {    echo $user->profile->bio; // una nueva consulta cada vez}


Solución (carga ansiosa):



$users = User::with('profile')->get();foreach ($users as $user) {    echo $user->profile->bio; // una sola consulta}


2.3. Paginación en lugar de LIMIT con gran desplazamiento



Con LIMIT 10 OFFSET 100000, MySQL igualmente recorre 100010 filas. Usa cursor-based pagination (búsqueda por índice):



SELECT * FROM posts WHERE id > $lastId ORDER BY id ASC LIMIT 10;


3. Optimización del código y la arquitectura



Incluso con una base de datos y una caché ideales, un código deficiente pu

Blogs

Book Recommendations