2009-09-10 15 views
25

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

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

Además, no estoy tomando ninguna decisión basada en las respuestas aquí. PHP es mi lenguaje de elección; Simplemente tenía curiosidad sobre su diseño.

+1

Esto se está acercando al territorio de la guerra de las llamas. Lo mejor es marcarlo como subjetivo – mcjabberz

+1

debe ser comunidad wiki – SilentGhost

+6

Esta es una gran pregunta, y definitivamente no es subjetiva o argumentativa. Merece más crédito IMO. –

Respuesta

38

Una razón es la falta de un compilador JIT en PHP, como han mencionado otros.

Otra razón importante es PHP tipado dinámico. Un lenguaje de tipo dinámico siempre será más lento que un lenguaje de tipo estático, ya que los tipos de variables se verifican en tiempo de ejecución en lugar de en tiempo de compilación. Como resultado, los lenguajes tipados estáticos como C# y Java serán significativamente más rápidos en el tiempo de ejecución, aunque por lo general deben compilarse con anticipación. Un compilador JIT hace que este no sea un problema para los lenguajes de tipado dinámico, pero desafortunadamente, PHP no tiene uno incorporado (aunque vea Facebook HHVM para ver un ejemplo de un JIT de terceros para PHP).

+0

+1 por mencionar el tipado dinámico. ¡Buen punto! – mcjabberz

+0

¡Me sorprende que esto no se haya mencionado antes! IMO este es un problema de rendimiento más grande que no tener un compilador JIT, aunque supongo que eso depende de muchos factores. –

+0

¡La tipificación bien dinámica definitivamente hace que la compilación de JIT y las optimizaciones generales de tiempo de ejecución sean más interesantes! – mcjabberz

2

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

(Esto fue especialmente cierto cuando PHP era/es usado como un CGI, y no como un módulo de Apache o vía FastCGI)


Otra idea podría ser que C# y compiladores de Java pueden hacer algunas pesada optimizaciones en tiempo de compilación - en el otro lado, cuando se compilan los scripts PHP (al menos, si no "engaña" con un caché de código de operación) cada vez que se invoca una página, la fase de compilación debe ser muy rápida ; lo que significa que no es posible perder mucho tiempo optimizando.


Todavía: Cada versión de PHP generalmente viene con una mejora de las actuaciones; por ejemplo, puede ganar entre el 15% y el 25% de la CPU al cambiar de PHP 5.2 a 5.3.

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


Una cosa importante, también, es que PHP es bastante fácil de escalar: sólo tiene que añadir un par de servidores web, y listo!

El problema que suele encontrarse al pasar de 1 a varios servidores es con sesiones; almacénelas en DB o memcached (muy fácil), y resuelva el problema.


Como comentario: Yo no recomendaría la elección de una tecnología porque hay un par de diferencias de la velocidad por ciento en algún punto de referencia: hay factores mucho más importantes, como lo bien que su equipo sepa cada tecnología - o, incluso, los algoritmos que vas a usar!

9

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

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

+9

+1 La velocidad es la mayor parte del tiempo sobre qué tan bien escrito está el código, no sobre las diferencias muy relativas en la velocidad medida en puntos de referencia tontos. Los buenos desarrolladores pueden hacer volar cualquiera de estas plataformas. – ChristopheD

+3

No estoy eligiendo un idioma. PHP es mi lenguaje de elección (para web, al menos). Simplemente tenía curiosidad. – ryeguy

+0

No son realmente los idiomas que hacen la diferencia de velocidad, sino la forma en que se ejecuta su código (compilado). Como han mencionado otros, las máquinas virtuales java y .NET se han ajustado bastante bien, podría ser que la forma en que se ejecuta php está menos optimizada. Si esto es un límite teórico/de lenguaje o simplemente una cuestión de trabajo para hacer para php guys, probablemente esté en debate. (Viendo el reciente aumento en el rendimiento de JavaScript, creo que es bastante posible acelerar la ejecución de php) –

4

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

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

-1

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ían ser más lentos en esos casos (aunque no hice un benchmark).

Además, la salida de PHP (HTML o lo que sea) debe descargarse al 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 ejecute (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 en tiempos de descarga, etc.).

No creo que sean comparables de manera general. Creo que debes tomar una tarea, que podrías lograr con esos tres lenguajes de programación, y luego compararla. Eso es básicamente lo que siempre debes hacer cuando eliges un lenguaje de programación; encuentre el que se ajuste a la tarea. No configure la tarea hasta que se ajuste al lenguaje de programación.

+1

Su comparación no tiene mucho sentido. El OP preguntaba por el rendimiento simple y crujiente de los números, y por qué un método en PHP sería más lento que el mismo método en Java/C#. –

+0

Bueno, no tenía mucho sentido porque las comparaciones son difíciles de hacer. Otra comparación, probablemente insatisfactoria, es preguntar "¿Por qué las peras son suéter y luego las manzanas?". Ambos son fruto (como PHP/Java son ambos lenguajes de programación) pero no hay una respuesta real a la pregunta simplemente porque difieren demasiado. – Jake

+0

No estoy de acuerdo. Puedes explicar claramente por qué las peras son más dulces que las manzanas (si conoces bien tus frutos). Los idiomas pueden tener diferentes usos, pero eso no debe impedir que pueda compararlos uno al lado del otro. –

5

Tanto Java como C# tienen JIT compilers, que toman el bytecode y compilan en código de máquina verdadero. El acto de compilarlo puede llevar tiempo, por lo tanto C# y Java pueden sufrir tiempos de arranque más lentos, pero una vez que el código se compila JIT, su rendimiento está en el mismo estadio que cualquier lenguaje "verdaderamente compilado" como C++.

+0

+1 Su respuesta es básicamente la misma que la mía. No veo por qué debería haber sido votado negativamente – mcjabberz

0

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 consiste en imprimir "Hola mundos" si le preocupa la velocidad, quédese con C# o Java.

+0

¡No hay lenguajes interpretados o compilados solo hoy en día! – dVaffection

Cuestiones relacionadas