Pregunta

Esto es algo que siempre me he preguntado: ¿Por qué PHP es más lento que Java o C #, si los 3 de estos lenguajes se compilan en bytecode y luego se ejecutan desde allí? Sé que normalmente PHP compila cada archivo con cada solicitud, pero incluso cuando traes APC (un caché de bytecode) a la imagen, el rendimiento no se acerca al de Java o C # (aunque APC lo mejora en gran medida).

Editar: Ni siquiera estoy hablando de estos idiomas en el nivel web. Estoy hablando de la comparación de ellos cuando son números crujidos. Ni siquiera incluye el tiempo de inicio ni nada de eso.

Además, no estoy tomando algún tipo de decisión en base a las respuestas aquí. PHP es mi idioma de elección; Simplemente tenía curiosidad por su diseño.

¿Fue útil?

Solución

Una de las razones es la falta de un compilador JIT en PHP, como han mencionado otros.

Otra razón importante es la escritura dinámica de PHP. Un lenguaje de tipo dinámico siempre será más lento que un lenguaje de tipo estático, porque los tipos de variables se verifican en tiempo de ejecución en lugar de en tiempo de compilación. Como resultado, los lenguajes con tipos estáticos como C # y Java serán significativamente más rápidos en el tiempo de ejecución, aunque normalmente tienen que compilarse antes de tiempo. Un compilador JIT hace que esto sea un problema menor para los lenguajes de tipos dinámicos, pero desgraciadamente, PHP no tiene uno incorporado (aunque vea HHVM de Facebook para un ejemplo de un JIT de terceros para PHP).

Otros consejos

Supongo que estás un poco en la comparación de manzanas y naranjas aquí - asumiendo que estás utilizando todos estos lenguajes para crear aplicaciones web, hay mucho más que solo el idioma. (Y muchas veces es la base de datos la que te está ralentizando ;-)

Nunca sugeriría elegir uno de estos idiomas sobre el otro sobre la base de un argumento de velocidad .

Tanto Java como C # tienen compiladores JIT , que toman el código de bytes y compilan en verdadero código de máquina. El acto de compilación puede llevar tiempo, por lo tanto, C # y Java pueden sufrir tiempos de inicio más lentos, pero una vez que el código es compilado por JIT, su rendimiento está en el mismo campo de juego que cualquier compilación verdaderamente compilada de " lenguaje como C ++.

La razón más importante es que la JVM HotSpot de Java y el CLR de C # usan la compilación Just-In-Time (JIT). La compilación JIT compila los códigos de byte a código nativo que se ejecuta directamente en el procesador.

También creo que el bytecode y el CIL de Java son de un nivel inferior al del bytecode interno de PHP, lo que podría hacer que muchas de las optimizaciones de JIT sean más fáciles y efectivas.

Una suposición descabellada podría ser que JAVA depende de algún tipo de " aplicación " servidor, mientras que PHP no lo hace, lo que significa que se debe crear un nuevo entorno cada vez que se llama a una página PHP.

(Esto fue especialmente cierto cuando PHP se usó como CGI, y no como un módulo de Apache o mediante FastCGI)


Otra idea podría ser que los compiladores de C # y JAVA pueden hacer algunas optimizaciones pesadas en tiempo de compilación, en el otro lado, ya que los scripts de PHP se compilan (al menos, si no "trucos" con un caché de código de operación) cada vez que se llama una página, la fase de compilación tiene que ser muy rápida; lo que significa que no es posible pasar mucho tiempo optimizando.


Aún así: cada versión de PHP generalmente viene con alguna mejora de las actuaciones; por ejemplo, puede ganar entre un 15% y un 25% de CPU, al cambiar de PHP 5.2 a 5.3.

Por ejemplo, eche un vistazo a esos puntos de referencia:


Una cosa importante, también, es que PHP es bastante fácil de escalar: ¡solo agregue un par de servidores web, y listo!

El problema con el que se encuentra a menudo cuando va de 1 a varios servidores es con las sesiones. Almacénelas en la base de datos o memcached (muy fácil) , ¡y el problema se resolvió!


Como una nota al margen: no recomendaría elegir una tecnología porque hay un par de diferencias de velocidad en algunos puntos de referencia: hay factores mucho más importantes, como qué tan bien conoce su equipo cada tecnología o, incluso, los algoritmos que utiliza. voy a usar!

No hay forma de que un lenguaje interpretado pueda ser más rápido que un lenguaje compilado o incluso un lenguaje JIT en condiciones triviales.

A menos que su programa de prueba consista en imprimir " Hello Worlds " Si le preocupa la velocidad, quédese con C # o Java.

Depende de lo que quieras hacer. En algunos casos, PHP es definitivamente más rápido. PHP es (bastante) bueno en la manipulación de archivos y otras cosas básicas (también cosas XML). Java o C # podría ser más lento en esos casos (aunque no lo hice).

Además, la salida de PHP (HTML o lo que sea) debe descargarse en el navegador, lo que también consume tiempo.

Además, la velocidad de Java / C # depende en gran medida de la máquina en la que se ejecuta (que podría ser múltiple). Java / C # podría ser lento en su computadora, mientras que PHP solo se ejecuta en un servidor desde el cual está disponible y siempre es tan rápido como el servidor (excepto los tiempos de descarga, etc.)

No creo que sean comparables de manera general. Creo que necesitas tomar una tarea, lo que podrías lograr con esos tres lenguajes de programación, y luego comparar eso. Básicamente, eso es lo que debe hacer al elegir un lenguaje de programación; Encuentra el que se ajuste a la tarea. No dé forma a la tarea hasta que se ajuste al lenguaje de programación.

Según wikipedia , PHP utiliza The Zend Engine , que no tiene un JIT .

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top