2010-11-02 13 views
86

Sé que puede minificar PHP, pero me pregunto si hay algún punto. PHP es un lenguaje interpretado, por lo que se ejecutará un poco más lento que un lenguaje compilado. Mi pregunta es: ¿verían los clientes una mejora de velocidad visible en las cargas de página y tal si fuera a minificar mi PHP?¿Hay algún punto para minificar a PHP?

Además, ¿hay alguna manera de compilar PHP o algo similar?

Respuesta

141

PHP se compila en bytecode, que luego se interpreta sobre algo parecido a una VM. Muchos otros lenguajes de scripts siguen el mismo proceso general, incluidos Perl y Ruby. No es realmente un lenguaje interpretado tradicional como, por ejemplo, BASIC.

No habría un aumento efectivo de la velocidad si intentara "minificar" la fuente. Obtendrá un aumento importante utilizando un bytecode cache like APC.

Facebook introdujo un compilador llamado HipHop que transforma el código PHP en código C++. Rasmus Lerdorf, uno de los grandes chicos de PHP hizo un presentation for Digg earlier this year que cubre las mejoras de rendimiento dadas por HipHop. En resumen, no es mucho más rápido que la optimización del código y el uso de una memoria caché de bytecode. HipHop es excesivo para la mayoría de los usuarios.

Facebook también recientemente dio a conocer HHVM, una nueva máquina virtual basada en su trabajo haciendo HipHop. Todavía es bastante nuevo y no está claro si proporcionará un mayor impulso al rendimiento para el público en general.

Solo para asegurarse de que se indique expresamente, lea that presentation en su totalidad. Señala numerosas formas de comparar y describir el código e identificar cuellos de botella utilizando herramientas como xdebug y xhprof, también de Facebook.

+1

Tenga en cuenta que todo el bytecode/vm cosa en realidad no le compra nada sin un bytecode (!) Caché. No entiendo por qué PHP sigue arrojando el bytecode de forma predeterminada ... – delnan

+0

Imagino que se trata de un problema de alojamiento compartido. APC está incluido en PHP de forma predeterminada a partir del antiguo troncal basado en 6.0. No estoy seguro si lo veremos de forma predeterminada en 5.4 o lo que sea que se llame el nuevo enlace ... – Charles

+0

Muchas gracias por la información. Lamentablemente, no tengo un control profundo de mi servidor (se alquila). ¿Es probable que los servidores web utilicen APC? – Bojangles

13

Olvídese de la idea de minificar PHP a favor de usar un caché de código de operación, como PHP Accelerator, o APC.

O algo más como memcached

+2

memcached no es un caché de código de operación! – Javier

+12

Dije "algo más". – Stephen

+3

no está claro que se refiera a algo más que un caché de código de operación. – Treffynnon

3

Con algunos de reescritura (nombres de las variables más cortas) que podría ahorrar unos pocos bytes de memoria, sino que también es raramente significativo.

Sin embargo, sí diseño algunas de mis aplicaciones de una manera que permite concatenar incluir scripts juntos. Con php -w se puede compactar significativamente, agregando un poco de ganancia de velocidad para el inicio del script. Sin embargo, en un servidor habilitado para el código de operación, esto solo guarda algunas verificaciones de mtime de archivo.

1

Hay compiladores de PHP ... ver this previous question para una lista; pero (a menos que tenga el tamaño de Facebook o apunte a su aplicación para ejecutar el lado del cliente) generalmente son mucho más problemas de lo que valen

El almacenamiento en caché de opcode simple le dará más beneficios para el esfuerzo involucrado . O crea un perfil de tu código para identificar los cuellos de botella y luego optimízalo.

3

Esto es menos una respuesta que un anuncio. He estado trabajando en una extensión de PHP que traduce códigos de operación Zend para ejecutar en una VM con tipado estático. No acelera el código PHP arbitrario. Le permite escribir código que se ejecuta mucho más rápido de lo que permite el PHP normal. La clave aquí es el tipado estático. En una CPU moderna, un lenguaje dinámico come pena de error de predicción de bifurcación hacia la izquierda y hacia la derecha. El hecho de que las matrices PHP son tablas hash también impone un alto costo: gran cantidad de errores de predicción de sucursales, uso ineficiente de la memoria caché, obtención previa de memoria deficiente y ninguna optimización SIMD en absoluto. La mala predicción de las sucursales y las fallas de caché en particular son el talón de Aquiles para los procesadores de hoy.Mi pequeña máquina virtual evita estos problemas mediante el uso de tipos estáticos y matriz C en lugar de tabla hash. El resultado termina corriendo aproximadamente diez veces más rápido. Esto está usando la interpretación de bytecode. La extensión opcionalmente puede compilar una función a través de gcc. En ese caso, obtienes de dos a cinco veces más velocidad.

Aquí está el enlace para cualquier persona interesada:

https://github.com/chung-leong/qb/wiki

Una vez más, la extensión no es un acelerador de PHP en general. Tienes que escribir un código específico para él.

Cuestiones relacionadas