Desarrollador entusiasta: caché de Redis en toda la configuración, latencia de la página de inicio reducida en un treinta por ciento. El túnel de pagos se queda en cuatro segundos. Nadie perfiló el túnel de pago: el tiempo vive en cuarenta y siete consultas SQL activadas por un accesor Laravel mal nombrado. Redis hizo que lo que ya era rápido fuera más rápido.
Crear perfiles PHP no es un paso que se realiza “cuando se tiene tiempo”. Es el antidebate entre intuición y medición. Sin un gráfico llameante, estás reescribiendo código; con él, atacas el cinco por ciento del gráfico de llamadas que cuesta el ochenta por ciento del tiempo.
Herramientas por contexto
| Herramienta | Medio ambiente | Sobrecarga |
|---|---|---|
| Fuego Negro / Mareas | Preproducción + producción de muestras | Bajo |
| SPX | Desarrollo/preproducción, producción posible | Muy bajo |
| Seguimiento de Xdebug | Sólo desarrollo/preproducción | Alto |
| Registro lento de PHP-FPM | Producción | Mínimo |
| Monitoreo APM (Datadog, Sentry) | Producción | Varía |
Flujo de trabajo recomendado:
- La supervisión identifica la vía lenta en el percentil 95.
- Perfiles de Blackfire o SPX esta URL bajo carga simulada.
- Corrección (SQL, caché, algoritmo).
- Volver a perfilar: prueba de ganancia cifrada.
No cree un perfil en la página de inicio si el ticket menciona "exportar administrador CSV en tiempo de espera".
Lee los resultados sin perderte
Señales comunes:
| Función dominante | Acción |
|---|---|
DeclaraciónPDO->ejecutar | EXPLICAR, indexar, precargar ORM |
curl_exec | Tiempo de espera, caché, procesamiento asincrónico |
file_get_contents | E/S locales, flujos, almacenamiento de objetos |
unserialize / json_decode grande | Formato de carga útil, caché |
masivo preg_match | Refactorización o análisis de expresiones regulares |
Integración en integración continua y preproducción
- Comparaciones de Blackfire en pull request si el presupuesto lo permite.
- Umbral de regresión: más el diez por ciento del tiempo de pared bloquea la fusión (rutas críticas).
- Conjunto de datos anonimizados próximos a la producción obligatoria: perfilados en tres líneas de la base de datos.
El generador de perfiles a veces revela límites de infraestructura: E/S de disco en archivos de sesión → sesiones de Redis; resolución DNS lenta → resolución fija; OPcache deshabilitado → activación inmediata. Actualizar el VPS antes de crear perfiles sigue siendo un desperdicio frecuente.
Antes de abrir un ticket de “instancia demasiado pequeña”, perfile la ruta lenta identificada por el monitoreo. Haga una referencia cruzada a OPcache Invalidation si la implementación reciente podría ofrecer una combinación de versiones antiguas y nuevas del código.
La cumbre: optimizar sin crear perfiles es refactorizar por diversión
Esto es lo que el viernes por la noche "Optimicé una línea" se olvidó de mostrar.
Regla del equipo: ticket de rendimiento cerrado con captura antes/después: enlace Blackfire o exportación SPX.
Decide y avanza sin puntos ciegos
A lo largo de media jornada, podrás establecer una disciplina de medición:
- Identifique la ruta de destino mediante monitoreo APM o registro lento.
- Perfil en preproducción bajo carga realista.
- Repara solo la parte superior del gráfico en llamas.
- Volver a medir el percentil 95 en producción.
- Documente la lección: ¿consultas clásicas N+1?
Comience con la ruta que los usuarios realmente esperan, no la que observa con más frecuencia durante el desarrollo. Cruce saturación PHP-FPM, Falta índice MySQL y EXPLICA PostgreSQL según su motor base.
Preguntas frecuentes
¿Qué herramienta perfilar en producción?
Muestreo de luz SPX o Blackfire/Tideways. Nunca Xdebug en modo paso a paso en producción. El registro de consultas lentas de PHP-FPM es suficiente para detectar E/S largas sin una sobrecarga total.
¿Xdebug Profiler está en preparación lo suficiente?
Sí, si los datos y el tráfico están cerca de la producción. Perfile las rutas lentas identificadas mediante el monitoreo, no solo la página de inicio que oculta los verdaderos cuellos de botella.
¿Cómo leer un gráfico de llamas?
El ancho representa el tiempo acumulado. Busque barras anchas inesperadas: PDO, curl, unserialize. Optimice primero el más grande, según la ley de Pareto.
Profiler muestra el PDO lento: ¿qué hacer?
Ejecute EXPLAIN en la consulta SQL, verifique los índices y las consultas ORM N+1. El perfilador muestra dónde ha pasado el tiempo; EXPLAIN explica por qué la base responde lentamente.
Medir una línea PHP cuesta menos que reescribirla dos veces: primero el perfil y después el ego.
