Rendimiento en PHP con XHProf

A principios de 2009, Facebook  sacó de su chistera XHProf.

Básicamente XHProf realiza un seguimiento de las llamadas a las funciones y,por consiguiente, de la cadena de eventos durante la ejecución del código. De esta manera podemos llegar a saber el tiempo  real transcurrido para ejecutar la aplicación, tiempo de la CPU y la memoria de su aplicación utiliza. Una gran herramienta para determinar los cuellos de botella y lo mejor es que puede ejecutarse en servidores de producción con un bajo coste de recursos. Además xhprof también provee de una UI para hacer más legible el código  en los directorios  xhprof_html/  y  xhprof_lib/ (tienen que ser accesibles por web).

Una vez instalada la extensión, para usarla en un wordpress he modificado el index.php de la forma:

   include_once 'path-al-directorio-xhrof/xhprof_lib/utils/xhprof_lib.php';
   include_once 'path-al-directorio-xhrof/xhprof_lib/utils/xhprof_runs.php';

   xhprof_enable(XHPROF_FLAGS_CPU + XHPROF_FLAGS_MEMORY);

   /** código original de index.php de wordpress*/
   define('WP_USE_THEMES', true);
   require('./wp-blog-header.php');
   /** FIN código original de index.php de wordpress*/

  $profiler_namespace = 'myapp';  // namespace for your application
  $xhprof_data = xhprof_disable();
  $xhprof_runs = new XHProfRuns_Default();
  $run_id = $xhprof_runs->save_run($xhprof_data, $profiler_namespace);

  // url a las librerias del ui de XHProf
  $profiler_url = sprintf('http://url-a-xhrof/xhprof_html/index.php?run=%s&source=%s', $run_id,    $profiler_namespace);
  echo '<a href="'. $profiler_url .'" target="_blank">Profiler output</a>';

Como regla general, deberíamos empezar a ordenar los datos por consumo de CPU. Las funciones de la parte superior son las que más consumen, así que ahí es donde debemos centrar nuestros esfuerzos y comenzar a optimizar / refactorizar. Después de cada cambio, se corre xhprof de nuevo, para ver los cambios (o la falta de ellos). Una vez que estamos satisfechos, ordenanos por  el uso de memoria o el tiempo de ejecución, y empezamos de nuevo.

Referencias

  • http://techportal.inviqa.com/2009/12/01/profiling-with-xhprof

Posted in php