feb
4

A día de hoy PHP es uno de los lenguajes web más utilizados y que cuenta con una comunidad más grande de desarrolladores, esto es así por varias razones, entre las que se encuentran:

  • OpenSource.
  • Fácil de aprender.
  • Se pueden cumplir (desarrollar) la mayor parte de los caprichos que tenga el desarrollador/cliente para una página web.

Pero, como no es oro todo lo que reluce, PHP es un lenguaje muy poco eficiente si lo comparamos con sus competidores, y esto es así, porque es un lenguaje interpretado, es decir, cada vez que se solicita una página web el servidor tiene que coger el archivo, interpretarlo y después ejecutarlo, lo que hace que la rapidez del script creado merme considerablemente, y esta es la razón de ser de HipHop.

HipHop es un compilador de PHP cuya tarea es realizar la conversión de PHP a C++, un lenguaje mucho más eficiente que el primero, ya que este es compilado.

HipHop ha sido desarrollado por Facebook durante los dos últimos años, y esto es así por una sencilla razón, Facebook es una de las páginas más grandes y con más tráfico que existen en la actualidad y que han sido desarrolladas en PHP (no en su totalidad pero sí la parte web, para más información puedes leer ¿Cómo funciona facebook? ), lo cual les está obligando a invertir grandes cantidades de dinero en servidores que podrían haberse ahorrado, de hecho, según los datos que proporcionan en la página del proyecto en, aproximadamente un 50%, lo cual, siendo claros es una auténtica barbaridad hablando en términos económicos para la empresa.

A mi modo de ver, este es un gran avance para PHP que tenía que ocurrir tarde o temprano, dado que si hasta el momento PHP era el lenguaje idóneo para crear proyectos pequeños e incluso medianos, con este compilador (una vez que funcione perfectamente), podrá ser utilizado, sin grandes problemas para realizar grandes proyectos, eso sí, teniendo siempre en cuenta que ha de haber alguna manera de interactuar con C++ desde PHP sin tener que utilizar aplicaciones como Thrift, así que tiempo al tiempo, habrá que ir viendo como va evolucionando el proyecto.

Por último os dejo un esquema con su funcionamiento:

Fuente: Facebook Developers

Tags:
Categoría PHP, Programación, Programas | Sé el primero en comentar!
oct
1

phpLa optimización de código es algo que ha preocupado a los programadores desde hace mucho tiempo, aunque por suerte o por desgracia, esta preocupación está decrementando día a día dado que los ordenadores con cada vez más potentes y por lo tanto importa menos el malgaste de ciclos de CPU.

Esta preocupación por el tiempo de ejecución de un programa viene dado sobre todo por el desarrollo de proyectos grandes (muchas visitas simultáneas) en los que sea crucial la velocidad de ejecución del algoritmo, por otro lado para aquellos proyectos que dada su escalabilidad pudiesen aumentar su complejidad de una forma un tanto brusca, es importante que el núcleo sea tan eficiente como sea posible además de, obviamente, tener el mínimo número de errores como sea posible, y por último puede que se dé el caso que en el caso de que tengas un servidor compartido, tu hosting te haya dado un toque porque haces uso de demasiados ciclos de CPU a la vez que te instan a migrarte a un plan de hosting más avanzado y que por consiguiente posea más recursos para tu script.

En este artículo vamos a intentar dar algunos consejos que permitan mejorar el rendimiento de nuestras aplicaciones web escritas en PHP con relativamente poco esfuerzo.

1.- Versión de PHP

Si estás utilizando una versión antigua de PHP será conveniente que hicieses una actualización de la misma en tu servidor, esto es así porque con cada versión, el equipo desarrollador de PHP ha ido implementando nuevas funciones así como optimizando partes de código, llegando a, reducir notablemente el tiempo de ejecución y la memoria consumida por determinados scrips y funciones de las que vienen por defecto.

A día de hoy, las últimas versiones estables de PHP son la 5.3.0 y la 5.2.11, eso sí, en ningún caso recomiendo instalar en un servidor en producción una versión que no sea estable.

2.- Utilizar algún sistema de Cacheado

En lenguajes interpretados, como es PHP, cada vez que se desea ejecutar un script, éste ha de ser interpretado, lo que hace que el consumo de CPU se incremente más que si se tratase de un lenguaje compilado, además de que ha de ejecutar todas las operaciones y funciones cada vez que se ejecute, lo que hace que si éstas son complejas, el script se ralentice considerablemente; un ejemplo de estas funciones son las llamadas a la base de datos.

A pesar de que no es recomendable cachear todas las páginas en algunos proyectos, en ocasiones es bastante recomendable utilizar aplicaciones como Memcache para así evitar que se ejecute el script siempre que se hace una petición de una página.

Otra opción es hacer uso de sistemas de templates, como es Smarty, que hace un cacheado de la página pero ejecutando siempre las consultas a la base de datos.

3.- Optimizar el código

3.1.- Strings

En PHP las cadenas de caracteres (Strings) pueden, al contrario que en lenguajes como C o Java, ir rodeados, tanto de comillas dobles () como de comillas simples (), pero a pesar de que el resultado pueda llegar a ser el mismo, el comportamiento de una cadena delimitada por uno u otro de estos caracteres se comporta de manera diferente. Leer más… »

Tags:
Categoría Manuales, Open Source, PHP, Programación | Sé el primero en comentar!
ene
13

Con el proyecto OGStats, estoy desarrollando una serie de clases, así como usando librerías bajo licencia LGPL para mejorar la experiencia del usuario a la hora de hacer uso de la aplicación, pues bien hoy vengo a hablaros de una clase que he puesto a disposición (está en la sección de descargas) de todo el mundo bajo licencia LGPL.

La clase anteriormente mencionada tiene la funcionalidad de conectar con una base de datos MySQL haciendo uso exclusivo de PHP, así que procedamos a comentar la clase, la verdad es que no es nada nuevo :P .

Una de las características de las que he implementado que más me han gustado, es la de el modo de testeo, modo debug o como quieras llamarlo.

En condiciones normales cuando se produce un error en la base de datos, hace un tratamiento del error haciendo uso excepciones que son gestionadas dentro de la propia clase (para así evitar que el usuario se complique demasiado la vida) siendo el comportamiento estándar realizar un envío por correo electrónico al administrador informando de la ocurrencia de un error (siempre y cuando la configuración previa así lo indique); este correo va (siempre y cuando se haga un uso completo de os métodos de la clase) acompañado de la petición que lo ha hecho saltar, el motivo del error, el archivo y la línea dónde se ha producido sendo error.

Pero por el contrario, si tenemos activado el modo de testeo, sendos errores son visualizados por pantalla (en lugar de realizar el envío por correo) del siguiente modo:

  • Si se trata de una sentencia SELECT, la clase muestra una tabla con el contenido de la sentencia además de lo que mostraría con las de cualquier otro tipo.
  • En cualquier otro caso muestra la petición, la línea y el archivo de la misma, y en el caso de que se hubiese producido un error, éste se mostraría por pantalla.

Cuando está en este modo, además también muestra a pie de página el tiempo que ha sido necesario para generar la página (que  no en descargarla)

Algunos ejemplos:

$db = new database;
$db->setAttribute('host', $db_host);
$db->setAttribute('username', $db_username);
$db->setAttribute('password', $db_password);
$db->setAttribute('database', $db_name);
$db->setMail($db_emergencyMail);
$db->setTesting($db_testing);
//New db connection
$db->connect(true);

En esta pequeña parte de código, se establecen los valores necesarios para realizar la conexión con la base de datos, siendo las funciones:

$db->etMail($db_emergencyMail);
$db->setTesting($db_testing);

Completamente opcionales a la hora de crear la conexión, ya que si no se les establece ningún valor, directamente se anula el envio de correos electrónicos en caso de fallo, y se desactiva el modo de testeo respectivamente.

Otro aspecto a tener en cuenta es como realizar de forma correcta las sentencias SQL o Querys para sacarle el máximo partido a esta clase:

$query = 'SELECT * FROM mi_tabla';
$db->execute($query, __FILE__, __LINE__, true);

Analicemos uno a uno los argumentos que se le pasan al método execute:

  • $query: es el campo que contiene la sentencia SQL.
  • __FILE__: es una manera de indicar el archivo en el que nos encontramos (campo opcional).
  • __LINE__: es una forma de indicar la línea del archivo en la que nos encontramos (campo opcional).
  • El último argumento se corresponde con una variable que anula el muestreo de información en caso de encontrarnos en el modo de testeo, de manera que si está con el valor true, el mensaje no se mostrará, mientras que si se pone false o simplemente no se pone nada, éste no se mostrará (campo opcional). Este punto es especialmente importante si realizamos una petición entre etiquetas </tr><tr>, o similares, lo que incomodaría mucho la lectura del texto, porque la tabla en este caso pierde la estructura.

Por último mencionar que en un principio puede parecer un poco pesado seguir esta estructura , pero partiendo de mi experiencia personal, me ha servido para corregir relativamente rápido algunos fallos que se daban en OGStats, ya que el tiempo de localización del error se restringe mucho.

Descargar

*NOTA: todos los mensajes que muestra esta clase están marcados con la clase devInfo por si se les quiere dar algún formato en particular.

**NOTA: si haces uso de esta clase, dejases un comentario, así como si le ves algún error o tienes alguna sugerencia para las próximas versiones.

Categoría PHP, Producción propia, Programación, Web | Sé el primero en comentar!
1 pages