Temas etiquetados como: ‘php’

$GLOBALS vs Static method en PHP 5.2.1

11 Noviembre, 2009

Hoy en el trabajo ha surgido la conversación de si es más efectivo el utilizar clases con métodos estáticos para tener una colección de objetos o variables $GLOBAL. No he utilizado en ninguno de mis desarrollos variables globales por lo que en el trayecto a casa vine dándole vueltas a como poder realizar la prueba de rendimiento entre variables globales y método estático.

Lo que se me ocurrió fue crear dos clases idénticas, a diferencia de que una tiene método estático y la otra no. La no estática la instanciaré en una variable global y entonces comprobaré el uso de memoria.

Ambas clases con una propiedad que almacena el string y con sus métodos de GET y SET. Utilizando el string ” Hola Mundo! “

Resultado:

Static

54.1 Kb
Hola Mundo!
Memoria usada: 54.5 KB de 256 KB
Memoria consumida:0.4 KB
0.000107 sec

Globals

54.1 Kb
Hola Mundo!
Memoria usada: 54.8 KB de 256 KB
Memoria consumida:0.7 KB
0.000126 sec

La conclusión es clara, Globals consume 0.3Kb más que un método estático y es algo más lento. Esta prueba se ha realizado con un simple string pero si la hiciéramos en una aplicación los datos de memoria y de tiempo tendrían una diferencia más notable.

Un buen framework PHP

2 Septiembre, 2009

Desde que tomé la decisión de utilizar symfony me sorprendo cada día que voy avanzando. Te encuentras todo aquello que querías tener hecho pero nunca tuviste tiempo de hacer.

Si todavía estás dándole vueltas a que framework php utilizar deja de buscar, symfony es el framework perfecto! Por que hago esta afirmación tan rotunda… pues porque en el aprendizaje de symfony recalcan las buenas prácticas, el uso de pruebas unitarias y funcionales y la refactorización de código. Tal vez estés pensando en utilizar Zend Framework porque tiene unos componentes que son realmente interesantes, no te preocupes! con symfony puedes hacerlo!

La filosofía de los creadores del framework es de “no reinventar la rueda” y si algo está bien hecho y funciona lo utilizan. Antes de embarcarse en el desarrollo de algo nuevo comprueban si existe. De hecho, el core de symfony está compuesto por otros proyectos open source como Creole, Prado, Spyc y Pake.

Tienes todavía dudas de si debes usarlo o no, el libro y la documentación es extensa (es una buena señal), entonces ponte a realizar la práctica de Jobeet! verás lo que se puede hacer y como! la potencia de symfony es importante!

Yahoo news y del.icio.us son proyectos construidos con symfony por lo que se puede garantizar el desarrollo de aplicaciones con carga extrema.

Optimiza tu desarrollo web en php con KCachegrind – PHP Profiler con Xdebug

24 Junio, 2009

La descripción encontrada en wikipedia de “profiling”:

Un “profiler” es una herramienta de análisis de performance que mide el comportamiento del programa mientras este está corriendo, particularmente la frecuencia y duración de las llamadas a funciones. La salida es un rastro (stream) de eventos o un sumario estático de los eventos observados (un “profile”, perfil o reseña). Los profilers usan una amplia variedad de técnicas para recolectar datos, incluyendo interrupciones por hardware, instrumentos de código, ganchos (hooks) del sistema operativo.

El uso de profilers es usado en el proceso de ingeniería de performance. Un profile generalmente es realizado relacionado la posición del código fuente donde suceden los eventos y el tamaño de las medidas de los datos que es proporcional al tamaño del código del programa. En contraste, el tamaño de un rastro es proporcional al tiempo de ejecución de un programa, haciéndolo impracticable. Para programas secuenciales, un profile, es generalmente suficiente, pero los problemas de pefrormance en programas paralelos (que esperan mensajes o temas de sincronismo) generalmente depende del tiempo de relación de los eventos, de esta forma requieren la localización total para tener un entendimiento del problema

Para ello tenemos que instalar php5-xdebug:

sudo aptitude install php5-xdebug

Una vez instalado el módulo Xdebug tenemos que editar su fichero de configuración que encontraremos en:

/etc/php5/apache2/conf.d/xdebug.ini

En ese fichero agregaremos las siguientes lineas:

xdebug.profiler_enabled = 1
xdebug.profiler_output_dir = (path de salida) “/home/usuario/tmp/”
xdebug.profiler_output_name = cachegrind.out. %R

Tras reiniciar el apache comprobaremos en un fichero php el resultado de phpinfo() para comprobar que el modulo xdebug está operativo.

Más parámetros de configuración: xdebug profiler

Al poner %R en el nombre de salida conseguimos que si estamos analizando el domonio localhost guarde los ficheros como: cachegrind.out.localhost

Para conocer más opciones de parametrización de xdebug.profiler_output_name en: http://www.xdebug.org/docs/all_settings#trace_output_name

De esta manera conseguimos que se vayan creando los ficheros que después leeremos con KCachegrind.

Instalamos Kcachegrind:

sudo aptitude kcachegrind kcachegrind-converters

Ahora solo tendremos que lanzar el programa Kcachegrind y abrir el fichero cachegrind.out.localhost. En el mismo directorio encontraremos más ficheros pero tenemos que abrir el fichero principal que es el que no tiene concatenado a su nombre con un punto una secuencia numérica.

kcachegrindkde

El programa analizará los logs de xdebug y nos lo mostrará con una interfaz gráfica intuitiva y no muy complicada de entender:

De esta manera podremos analizar si nuestra aplicación web pierde mucho tiempo en algún proceso en el que no hayamos reparado con anterioridad, el uso de memoria y las llamadas que se realizan a funciones y/o métodos.

Esta configuración está pensada para probarla en la máquina local de desarrollo, en ese caso en el path de salida que hemos configurado en el xdebug.ini tenemos que asignarle los permisos necesarios para que el usuario de apache www-data pueda escribir los logs.

Una vez finalizado su uso, es recomendable desactivar el profile de xdebug para que no nos sature de logs a los que no vamos a hacer caso.

Aunque el pantallazo es de un entorno KDE esta configuración y software se ha realizado en: Ubuntu 9.04 Gnome.

Si tu entorno de desarrollo es Windows, también puedes activar el módulo php_xdebug.dll en tu php.ini y seguir los mismos parámetros de configuración en tu fichero php.ini. Como herramienta para examinar los logs del profile xdebug puedes utilizar WinCacheGrind.

Espero que os sea de utilidad, si conocéis alguna herramienta y/o utilidad que os facilite la tarea de realizar aplicaciones ligeras agradecería el comentario.

Framework :: Probando la vista

22 Enero, 2009

Bien, hasta ahora el código que estaba publicado en el repositorio no era de mucha utilidad si no había un caso de ejemplo para probar el funcionamiento de la vista.

A tener en cuenta para pruebas:

  • Document root: html
  • Código donde se monta la vista: proyecto/php/portada/portada.php
  • Tipo de contenido de pruebas: demo

El resultado de la prueba es un listado de 10 elementos de tipo “demo” con una paginación de 2 páginas, ya que cuando preguntamos por el total, el método devuelve directamente 20. Las clases del tipo de contendo Demo son clases de prueba, todavía falta la definición de como construir los tipos de contenido.

La idea de la vista, es un gestor de plantillas por sustitución de tag omitiendo cualquier tipo de lógica en la propia plantilla. El objetivo es tener un motor de plantillas de fácil uso a la hora de montar pantallas teniendo en cuenta que en la propia plantilla el diseñador no se tendrá que econtrar código alguno que implique lógica. Entendiendo lógica como boucles, condiciones…

Framework :: descargando el código de SVN

22 Enero, 2009

Para descargar el código del subversion tenemos que utilizar un cliente de subversion :) “me he lucido”. Tirando de la blogosfera podemos obtener manuales de como utiluzar diferentes clientes de subversion.

También me ha parecido de interés el exponer una explicación del servicio de Subversion para aquellos que no lo conozcan. Este servicio sirve para tener un control de versiones y desarrollar en equipo. Para esto podemos acceder al blog de Manuel Recena que en su post de Algunas ideas de como usar subversion lo describe con detalle.

Si tenéis algún problema para la descarga avisarme para poder solucionarlo. El proyecto está en modo lectura para todos y para poder participar hace falta una cuenta de usuario, por lo que no podréis realizar un commit si no os he dado de alta.

Feliz descarga! :-)

Framework :: El comienzo

16 Enero, 2009

Hace ya un tiempo que llevo dandole vueltas a la idea de comenzar a desarrollar un framework para desarrollar en PHP. Es cierto que en internet existen para escoger unos cuantos, unos más conocidos que otros y un sin fin de clases para utilizar en los desarrollos de cada uno.

Aunque dispongo de algo más de código que el expuesto en el respositorio de subversion que he montado para el proyecto tengo que “limpiarlo” un poco para subirlo al repositorio.

Ahora tengo un gestor de plantillas, cuya idea principal es el montar la página gestionando formularios, paginaciones y demás elementos que vaya incorporando al desarrollo. Ahora será dificil poder comprobar el funcionamiento de las clases a no ser que le dediques un poco de tiempo a leer el código pero en cuanto pueda tener código suficiente para que se pueda ir evaluando pasará un tiempecito ^_^ esperemos que no mucho.

Un punto importante en el proyecto es la documentación y en unos dias montaré un wiki para ir documentando las clases publicadas en el repositorio, por lo que se intentará mantener la publicación de documentación con la publicación de código nuevo.

El proyecto es ambicioso para una sola persona pero sin tener la obligación de alcanzar una fecha de fin no hay presión :)

Una de las asignaturas pendientes para este proyecto es licenciarlo bajo GPL, pero aunque ahora el código no haga referencia a esta licencia así estará en el momento que me sea posible.