2010-07-23 19 views
31

Me sorprendió saber hoy que PHP se usa ampliamente en sitios web de alto tráfico.¿Por qué PHP es apto para sitios web de alto tráfico?

Siempre he pensado que PHP no es fuerte en términos de rendimiento, ya que es un lenguaje de scripting dinámico (por ejemplo, en comparación con el lenguaje compilado estático, como C/Java/C#, etc.).

Entonces, ¿por qué funciona tan bien?

Respuesta

57

Lo que generalmente encontrará es que no es tan lento como cree. La razón por la que muchos sitios son lentos es porque los hosts están sobrecargados.

Pero una ventaja principal de PHP sobre un lenguaje compilado es la facilidad de mantenimiento. Debido a que PHP está diseñado desde cero para el tráfico HTTP, hay menos para construir que con la mayoría de los otros lenguajes compilados. Además, la fusión en los cambios se vuelve más fácil ya que no necesita recompilar y reiniciar el servidor (como lo haría con un binario compilado) ...

He hecho una cantidad considerable de puntos de referencia en ambos, y para cualquier lugar debajo de aproximadamente 50k solicitudes por segundo (basado en mis números) realmente no hay una ganancia significativa al usar un binario compilado (FastCGI). Claro, es un poco más rápido usar C compilada, pero a menos que estés hablando de tráfico a nivel de Facebook, eso realmente no significará $$$ significativo. Y definitivamente no va a compensar la tasa de desarrollo relativamente rápida que PHP permitirá en comparación con el uso de C (que probablemente requerirá muchas veces el código ya que no se administra en memoria) ...

PHP, si corresponde escrito puede ser bastante escalable. Los factores de limitación suelen estar en su motor de base de datos. Y ese va a ser un factor común sin importar qué tecnología use ...

+8

Con respecto a Facebook ... han desarrollado un convertidor de PHP a C++ ... así que realmente, la mayoría de su sitio * se * ejecuta en C++. – mpen

+4

Es cierto, sin embargo, la mayor parte de su código fuente está escrito en PHP. Así que es un área gris en cuanto a lo que se está ejecutando (es un binario compilado, pero también es PHP ... Ofrece lo mejor de ambos mundos). Y como dije antes, tienen un nivel de tráfico que proporcionará ganancias significativas cambiando de un servidor interpretado (PHP) a un servidor compilado (PHP-> C++ -> G ++ -> binario) ... – ircmaxell

+2

Es un poco El argumento de Straw-Man para comparar el desarrollo web de PHP para el desarrollo web C y luego concluir (obviamente) que PHP es mejor para él y, por lo tanto, no compilado es mejor que compilar para el desarrollo web. ¿Cómo se ve la comparación de un lenguaje compilado adecuado para el desarrollo web, como C# con ASP.NET MVC? – JulianR

1

No es así, por lo que hay proyectos como HipHop, pero los lenguajes dinámicos suelen ser más rápidos de desarrollar y el hardware es más económico que los desarrolladores.

2

Realmente no funciona "tan bien", lo suficientemente bien como para ser utilizado. Tenga en cuenta, sin embargo, que Java y C# .NET también se ejecutan como bytecode dentro de una máquina virtual. PHP, con herramientas como Zend Optimizer, también puede omitir el paso de compilación y ejecutarse como bytecode.

PHP no se ejecutará tan rápido como el código C nativo compilado, pero los sitios web como Facebook compilan PHP a C++ para que se ejecute más rápido (consulte HipHop-PHP).

+2

En realidad, es imposible ejecutar C# como bytecode con la distribución .NET predeterminada: siempre se compila JIT con código máquina nativo. Si bien Java se puede ejecutar como bytecode, generalmente también se compila con JIT. –

+0

Java y C# se ejecutan como código de máquina en estos días modernos. –

10

Las implementaciones de Java en una gran empresa son un desastre ... peleando con compilaciones y códigos que podrían no compilarse para las pequeñas cosas. Además, PHP se ejecuta en una configuración bastante simple basada en el servidor, no en el código voluminoso que es Weblogic (u otros), por lo que otros tienen razón en que es de bajo costo desarrollar y es barato de implementar en varias máquinas diferentes. Ciertamente no ayudó que me amargara trabajar en un ambiente corporativo grande, MUY ineficiente mientras hacía Java ....

No diría que los desarrolladores de PHP son más baratos per se (hago más ahora como Desarrollador de PHP que lo hice como desarrollador de UI Java) pero sé que mi último empleador me pagó una cantidad no despreciable de tiempo dedicado a la configuración, implementación, compilación, etc. que no es necesario en PHP. Estamos hablando probablemente de un día/semana de problemas de configuración relacionados debido a nuevas implementaciones de sucursales o versiones relacionadas. Por lo tanto, el monto adicional que recibo ahora se compensa con una cantidad significativa de más código con el que puedo trabajar cada semana.

PHP está siendo ayudado por el hecho de que MySQL y Postgres (en menor medida) se han vuelto mucho más poderosos. No están directamente vinculados, pero tener eso como un emparejamiento común solo endulza el trato para aquellos que toman decisiones.

+6

+1 "peleando con compilaciones y códigos que no compilan para las cosas más pequeñas" ... –

3

La mayoría de los sitios web tienen cuellos de botella de rendimiento al consultar una base de datos, etc. La cantidad de tiempo que el script tarda en ejecutarse suele ser pequeña en comparación con esto. Usar cosas como libmemcached puede ayudar a mitigar esto.

2

Muchos sitios comenzaron como sitios de poco tráfico. Una vez que tiene su sitio PHP funcionando y de repente tiene que manejar un tráfico mucho más alto, es más barato simplemente comprar más servidores que reescribir su aplicación de PHP a otra cosa. Además, hay herramientas que mejoran el rendimiento de PHP.

También tenga en cuenta que hay otros factores: la base de datos, la estrategia de almacenamiento en caché que afectan el rendimiento más que el propio PHP.

-4

En mi opinión, la naturaleza apátrida de PHP es el factor más importante para su escalabilidad. Ha pasado un tiempo desde que realicé cualquier trabajo web con Java/ASP.NET, pero recuerdo que ambas tecnologías tienen un "motor" de aplicación central que atraviesa todas las solicitudes. Eso es genial, porque la información y el estado se pueden compartir entre instancias, y una gran cantidad de arranque (lectura de archivos de configuración, conexión a bases de datos, etc.) se puede hacer una vez y luego compartir entre instancias. Sin embargo, es malo porque ese "motor" central se convierte en un cuello de botella para toda la aplicación.

La falta de un motor central en PHP también significa que escalar su aplicación suele ser una simple cuestión de agregar otro servidor web a su plataforma (aunque escalar la base de datos junto con ella es más complicado). Imagino que escalar una aplicación Java/ASP.NET es mucho más complicado, y alcanzan un punto de saturación donde agregar más hardware da menos impulso cada vez.

+7

¡Tienes * no * idea de lo que estás hablando! ! –

+1

Me encantaría * escuchar cómo estoy tan equivocado. – mellowsoon

+2

HTTP es sin estado, no PHP ... Con respecto al "motor central", PHP tiene Zend Engine. Y ese arranque (leer archivos de configuración, conectarse a bases de datos, etc.) es casi lo mismo para cualquier aplicación PHP no trivial.Claro, el uso de YAML por parte de algunas aplicaciones PHP/Ruby/Pythons puede parecer atractivo, pero esto no puede ser solo un punto de venta. –

Cuestiones relacionadas