¡El lenguaje PHP no ha muerto!

En junio pasado, el PHP celebró sus 20 años. A pesar de que este lenguaje ha madurado y tiene un amplio uso, su reputación es mala. Constantemente criticado y tildado de permisivo, lento o de estar respaldado por una comunidad poco profesional, el PHP es excluido con frecuencia de proyectos web de gran envergadura. Tales quejas han estado siempre bien fundadas, pero la actualización que en 2009 aportó al PHP la versión 5.3, nos ha obligado a replantear nuestra opinión. En efecto: con su significativa contribución a la expansión de sitios web dinámicos, y con el lanzamiento en noviembre próximo de su versión 7, el PHP sigue a la carrera más que nunca.

¿Demasiado permisivo?

En el mundo de la informática, existen dos tipos de lenguaje: el tipado y el no tipado (en este caso vamos a referirnos al tipado dinámico). El lenguaje tipado impone a los programadores que definan el formato de almacenamiento de los datos que desean registrar como variables (en la memoria). El tipado dinámico se encarga de seleccionar el mejor formato para el registro de los datos, lo cual facilita el trabajo del programador. Sin embargo, con frecuencia sucede que el uso de la memoria no es óptimo. Por ejemplo: en los casos de gestión de grandes volúmenes de datos, se selecciona un formato ahorrador en memoria por dato. Los lenguajes de alto nivel, como PHP, no siempre eligen los formatos más convenientes, de modo que, un programador que no conozca el funcionamiento de este lenguaje, podría fácilmente desarrollar un programa que monopolice todos los recursos del servidor, y deducir que PHP es un lenguaje permisivo, cuando en realidad no es el caso.

De hecho, el tipado dinámico impone cierto rigor en la escritura del código. Es teóricamente posible mezclar dos formatos de datos diferentes, aunque el resultado no tiene que ser el esperado. Tratemos de adicionar una palabra del diccionario a una cifra... ¿cómo? Nunca haríamos algo así. Pues este es uno de los errores más frecuentes en la programación con PHP. A pesar de esto, el tipado dinámico es de gran interés. En internet, la mayor parte de los datos se intercambia en formato de texto a través del protocolo http. En algunos casos, no se esperan textos, sino valores numéricos: ¡hace ya más de 20 años que existe el intercambio de imágenes y videos! El uso del tipado dinámico permite al programador la simplificación de su código y el paso de un texto al valor numérico con gran facilidad, con el efecto colateral de la multiplicación del riesgo de errores en el programa (bugs) para las aplicaciones desarrolladas.

La utilización del timado dinámico permite al desarrollador simplificar su código y pasar fácilmente de un texto a un valor numérico, multiplicando colateralmente el riesgo de errores en el programa y de problemas en el mantenimiento de la aplicaciones desarrolladas...

Afortunadamente, la comunidad, y especialmente los derarrolladores web que brindan apoyo al PHP, han evolucionado significativamente en los últimos diez años. Se han identificado y documentado las malas prácticas; y, sobre todo, se han democratizado numerosas herramientas para su total erradicación. Uno de los mejores ejemplos es OWASP, que cada año hace inventario de los problemas de seguridad más comunes en internet. ¿Es posible entonces calificar el PHP como un lenguaje permisivo? Un buen conocimiento del tipado dinámico permite esquivar las trampas con facilidad. Además, nada obliga al desarrollador a ser tan permisivo como el lenguaje que utiliza.

Apreciado por los principiantes e injustamente rechazado por los profesionales

La popularidad del PHP es fácil de explicar. La flexibilidad de este lenguaje lo hace accesible a los principiantes, por lo que somos muchos los que hemos aprendido a programar en PHP. En la informática, como en el amor, los primeros pasos son con frecuencia los más difíciles, y hay incluso algún que otro proyecto que repasamos con cierta vergüenza años más tarde. Muchas aplicaciones en PHP, codificadas por desarrolladores poco experimentados, constituyen catálogos de malas prácticas, en ocasiones con serias consecuencias a nivel de seguridad y/o rendimiento (problemas de seguridad con los datos de clientes*, procesamiento de datos masivos sin optimización...) Es fácil hacer de PHP un chivo expiatorio.

Muchas de las aplicaciones son codificadas en PHP por principiantes, razón por la cual la codificación no se optimiza.

Por otra parte, con la democratización de internet a principios de la década de 2000, las comunidades de los competidores del PHP comenzaron a estructurarse, y fue en esta época en que se crearon las bibliotecas compartidas (partes de códigos reutilizables), lo cual contribuyó al mejoramiento de la calidad de los proyectos desarrollados en Java, por ejemplo. La comunidad del PHP tardó en organizarse, obligando así a cada equipo de programadores, a desarrollar sus propias bibliotecas. En el medio profesional, el PHP se creó una imagen de lenguaje "para debutantes", incompatible con proyectos serios. A pesar de esto, podemos encontrarlo en proyectos de gran envergadura, tales como Facebook o Wikipedia, que establecen millones de conexiones diariamente, y en cuyos equipos de desarrollo no hay un solo debutante. ¿Por qué? En 2009, la comunidad del PHP emergió, y este lenguaje dio un cambio considerable, originado por la versión 5.3, que se mostraba como de poca envergadura. Apareció una función crucial: el mecanismo namespace, que simplificaba grandemente la separación del código entre diferentes bibliotecas reduciendo los efectos colaterales y permitiendo a su vez la escritura en las bibliotecas, promovida por la comunidad del PHP con la creación de la plataforma Composer para compartirlas y distribuirlas. El número de bibliotecas disponibles en Composer ha excedido los límites rápidamente, brindando a los programadores la posibilidad de concentrarse en el aspecto técnico de su trabajo. La biblioteca Guzzle es un perfecto ejemplo de esto: antes de la llegada de Composer, las solicitudes en http dependían de Curl. Con esta extensión del lenguaje, era más fácil efectuar solicitudes http, pero no se tenían en cuenta limitaciones técnicas como la definición del timeout, el tamaño límite de los datos, la utilización del streaming, etc. La descarga de grandes archivos conducía a la superación del límite de memoria. Con la llegada de Guzzle, se optimizaron la utilización de Curl y las solicitudes http, dando paso a la difusión de las buenas prácticas y a la reducción del consumo de la memoria de los scripts PHP para las solicitudes http.

Paralelamente al lanzamiento de la versión 5.3 de PHP, aparecieron Symfony2, Zend Framework2 y más recientemente Laravel, que han permitido la industrialización de la programación en PHP con el aporte de técnicas de desarrollo más rápidas, las cuales han simplificado la implementación de cachés al aumentar los niveles de seguridad y acelerar la ejecución del código. En resumen: durante cinco años, las herramientas del PHP como lenguaje profesional de programación, han estado en su lugar. La versión 5.3 ha marcado la aceleración del desarrollo de este lenguaje en un ritmo casi correspondiente al de un año. La versión 5.6 del PHP está disponible en la actualidad, y respaldada por la comunidad conjuntamente con la versión 5.5.

¿Un lenguaje lento? Todo es cuestión de interpretación

Anteriormente hacíamos alusión a Facebook como proyecto que utiliza PHP a gran escala. Seamos honestos: Facebook no utiliza PHP como usted y yo. La compañía buscaba un medio para acelerar el funcionamiento del código PHP. Después de intentar, en 2010, de compilar PHP conjuntamente con el programa Hip-Hop, los programadores de Mark Zuckerberg crearon, en 2013 una nueva plataforma de ejecución del PHP, denominada HHVM, que resultó en un lenguaje más restringido que el PHP: el Hack. ¿Debemos deducir que el PHP tiene problemas crónicos de lentitud?

El PHP es un lenguaje interpretado. Por esta razón, se hace necesariamente más lento que los lenguajes compilados, o sea, que se transforma en ejecutable autónomo (en el lenguaje nativo de la máquina), como es el caso de C o C++. Los lenguajes interpretados son «compilados» durante su ejecución, lo cual aumenta el tiempo de cálculo. Algunos de ellos, como Java o Python, son a veces «precompilados» en un lenguaje cercano al de la máquina (bytecode), pero la ejecución de los mismos requiere una segunda -y muy rápida- interpretación. Lenguajes como PyPI, Java8, Lua, entre otros, son capaces de compilarse directamente en el lenguaje nativo de la máquina durante la ejecución, permitiendo así el rápido inicio de la aplicación. Este procedimiento se conoce con el nombre de JIT (del inglés Just-in-time compilation.

Regresemos a la supuesta lentitud de PHP. Está claro que este no es el único lenguaje interpretado, aunque tiene la especificidad de no ser persistente. Cuando un usuario se conecta a un sitio codificado en PHP, el servidor se reincida y posteriormente se compila, contrariamente a programas como Java, que se compilan solamente con la ejecución de la aplicación, que coincide en la mayoría de los casos con el inicio del servidor. Este diseño presupone una ventaja para la escalabilidad de las aplicaciones codificadas en PHP, pues cada solicitud se beneficia de un nuevo entorno para su ejecución. En caso de fugas de memoria durante el uso de la aplicación, por ejemplo, no habrá impacto en las solicitudes posteriores. De igual manera, la seguridad es mayor debido al aislamiento de cada solicitud. Este funcionamiento brinda estabilidad a las aplicaciones, y evita que los administradores de sistemas tengan que reiniciar los servidores PHP con regularidad, a diferencia de Tomcat (servidor Java), que monopoliza toda la RAM más allá de un intervalo determinado de actividad (lo cual solo sucede con aplicaciones mal codificadas).

Entonces es cierto: el hecho de que el lenguaje PHP no sea persistente, ha causado lentitud, en comparación con otros lenguajes de programación. Pero no es el caso desde 2012. El lanzamiento en este año de la versión 5.4 de PHP, incluye por defecto un mecanismo de caché, OPcache**, que permite conservar la compilación desde la primera utilización. Algunos dirán que no se trata de una novedad, ya que módulos como eAccelerator, APC o Xcache siempre han sido muy utilizados para responder a este problema de «lentitud» de PHP. No obstante, la integración de este mecanismo de caché en el corazón del PHP tiene, a todas luces, una rapidez de ejecución perfectamente comparable con la de otros lenguajes de manera general, además de la ventaja de la escalabilidad. Por esta razón recomendamos a los usuarios pasar a una versión más reciente de PHP para aprovechar el alto rendimiento.

Lanzada en 2012, la versión 5.4 incluye por defecto un mecanismo de caché que permite conservar la recopilación durante el primer uso.

¿Por qué entonces la mala reputación de lenguaje lento? Aunque el PHP 5 sea ligeramente menos eficiente que los lenguajes JIT, la verdadera razón por la que se considera un lenguaje lento radica en su popularidad entre los programadores debutantes, que sitúa la habilidad promedio del conjunto de deasrrolladores que programan en PHP por debajo de la media de los programadores en otros lenguajes. En efecto, muchos sitios en PHP son lentos, pero no precisamente debido al código PHP, sino a otros factores independientes al código, como la relación entre la aplicación y su entorno; la utilización por parte de la mayoría de los sitios programados en PHP de una base de datos alojada en otro servidor y la no optimización de las solicitudes SQL; y el registro de archivos en el disco duro del servidor. Otras acciones (redes, escritura en el disco...) aumentan la latencia; sin contar los fallos en la optimización, o las solicitudes sin índice. Un ejemplo frecuente lo constituyen las extensiones de WordPress, codificadas en PHP. Muchas de ellas lanzan solicitudes hacia otros servidores o buscan en bases de datos a cada solicitud hecha por un usuario, ralentizando los sitios web, sin que el PHP tenga nada que ver. A propósito, si desea conocer por qué su aplicación no tiene rendimiento óptimo, le invitamos a ver la conferencia "Beyond PHP - it's not (just) about the code", presentada en el evento FOSDEM 2015.

A solo unas semanas del lanzamiento del PHP 7, que ofrecemos en beta en el alojamiento web de OVH, resulta oportuno destruir los tabúes existentes con relación a este lenguaje, que posee serias ventajas para enfrentar una de las problemáticas más interesantes de la actualidad: la escalabilidad de las aplicaciones y de las infraestructuras que las alojan. Próximamente retomaremos en detalle el PHP 7. Hasta entonces, esperamos que tenga la ocasión de reconsiderarlo sin predisposición.

Vincent Cassé es programador de OVH, y forma parte del equipo que gestiona la infraestructura del alojamiento web que ofrece OVH. Ha trabajado particularmente en la implementación de hubiC, codificado en PHP.


* Las inyecciones de SQL han sido uno de los problemas fundamentales para las aplicaciones PHP durante mucho tiempo: www.owasp.org/index.php/SQL_Injection

**Si desea más información sobre el funcionamiento técnico de OPcache, le redirigiremos a la conferencia de Julien Pauli, responsable del lanzamiento de las dos últimas versiones de PHP. Ver el video I Ver las diapositivas

Mi cuenta de clienteContact SalesWebmail OVHcloud Blog

¡Bienvenido/a a OVHcloud!

Identifíquese para contratar una solución, gestionar sus productos y servicios, y consultar sus pedidos

Conectar