Mejorar el Rendimiento

Para conseguir aplicaciones más rápidas requiere perfeccionar muchos aspectos: servidor, cliente, red, base de datos, servidor web, fuentes estáticas, etcétera. En este capítulo destacamos escenarios donde se puede mejorar el rendimiento y cómo detectar lo que es realmente lento en su aplicación.

Perfil en el servidor

Cada aplicación es diferente, el perfilado permanente es importante para conocer donde se puede aumentar el rendimiento. Los perfiles nos dan un panorama real de lo que es realmente lento y lo que no. Estos pueden variar entre una petición y otra, por lo que es importante tomar suficientes mediciones para tomar decisiones.

Perfiles con XDebug

XDebug proporciona una manera fácil de perfil en aplicaciones PHP, instalar la extensión y habilitar en el php.ini los perfiles:

xdebug.profiler_enable = On

Usando una herramienta como Webgrind puedes ver qué métodos y funciones son más lentas que otras:

Perfiles con Xhprof

Xhprof es otra extensión interesante para perfilar aplicaciones PHP. Agregue la siguiente línea al comienzo del archivo bootstrap:

<?php

xhprof_enable(XHPROF_FLAGS_CPU + XHPROF_FLAGS_MEMORY);

Luego al final del archivo, guardar los datos perfilados:

<?php

$xhprof_data = xhprof_disable('/tmp');

$XHPROF_ROOT = '/var/www/xhprof/';
include_once $XHPROF_ROOT . '/xhprof_lib/utils/xhprof_lib.php';
include_once $XHPROF_ROOT . '/xhprof_lib/utils/xhprof_runs.php';

$xhprof_runs = new XHProfRuns_Default();
$run_id = $xhprof_runs->save_run($xhprof_data, 'xhprof_testing');

echo "http://localhost/xhprof/xhprof_html/index.php?run={$run_id}&source=xhprof_testing\n";

XHProf proporciona un visor HTML incorporado para analizar los datos perfilados:

Perfilando sentencias SQL

La mayoría sistemas de bases de datos proporcionan herramientas para identificar sentencias SQL lentas. La detección y corrección de consultas lentas es muy importante para aumentar el rendimiento en el lado del servidor. En el caso de Mysql, puede usar el log de consultas lentas para saber que consultas SQL están tomando más tiempo de lo esperado:

log-slow-queries = /var/log/slow-queries.log
long_query_time = 1.5

Perfil en el cliente

A veces podemos necesitar mejorar la carga de elementos estáticos como imágenes, javascript y css para mejorar el rendimiento. Las siguientes herramientas son útiles para detectar cuellos de botella comunes en el lado del cliente:

Perfilar con Chrome/Firefox

Los navegadores más modernos disponen de herramientas para perfilar el tiempo de carga de la página. En Chrome puede utilizar el inspector web para saber cuánto tiempo está tomando la carga de los diferentes recursos requeridos por una sola página:

Firebug proporciona una funcionalidad similar:

Yahoo! YSlow

YSlow analiza las páginas web y sugiere formas para mejorar su rendimiento basado en un conjunto de reglas para páginas web de alto rendimiento

Perfilar con Speed Tracer

Speed Tracer es una herramienta para ayudarle a identificar y solucionar problemas de rendimiento en las aplicaciones web. Visualiza las métricas que se toman desde puntos de instrumentación de bajo nivel dentro del navegador y los analiza a medida que se ejecuta su aplicación. Speed Tracer está disponible como una extensión de Chrome y funciona en todas las plataformas donde las extensiones son soportadas actualmente (Windows y Linux).

Esta herramienta es muy útil porque le ayuda a obtener el tiempo real que se utiliza para representar toda la página, como el análisis del HTML, evaluación de Javascript y estilos CSS.

Utilizar una versión reciente de PHP

PHP es más rápido cada día, usando la última versión mejora el rendimiento de sus aplicaciones y también de Phalcon.

Utilizar un caché Bytecode de PHP

APC como tantos otros caches de bytecode, ayuda a una aplicación para reducir la sobrecarga de lectura, muestreo y análisis de archivos PHP en cada solicitud. Una vez instalada la extensión utilice la siguiente configuración para activar APC:

apc.enabled = On

Realizar labores de bloqueo en segundo plano

Procesar un video, enviar e-mails, comprimir un archivo o una imagen, etc., son tareas lentas que deben ser procesadas por trabajos en segundo plano. Hay una variedad de herramientas que proporcionan colas o sistemas de mensajería que funcionan bien con PHP:

Google Page Speed

El mod_pagespeed acelera su sitio y reduce el tiempo de carga de página. Este módulo del servidor HTTP Apache de código abierto (también disponible para nginx como ngx_pagespeed) automáticamente aplica las mejores prácticas de performance web a las páginas y a los activos asociados (CSS, JavaScript, imágenes) sin necesidad de modificar su contenido o flujo de trabajo.