¿Tiene sentido minificar PHP?


101

Sé que puedes minimizar PHP, pero me pregunto si tiene algún sentido. 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 la velocidad visible en la carga de la página y tal si tuviera que minificar mi PHP?

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


Un punto obvio es la ofuscación, para hacer que su código sea menos portátil, lo que puede ser un objetivo válido.
Juan

Respuestas:


161

PHP se compila en un código de bytes, que luego se interpreta sobre algo parecido a una máquina virtual. Muchos otros lenguajes de secuencias de comandos siguen el mismo proceso general, incluidos Perl y Ruby. No es realmente un lenguaje interpretado tradicional como, digamos, BÁSICO.

No habría un aumento de velocidad efectivo si intentara "minificar" la fuente. Obtendría un aumento importante al usar una caché de código de bytes como APC .

Facebook introdujo un compilador llamado HipHop que transforma la fuente PHP en código C ++. Rasmus Lerdorf, uno de los grandes tipos de PHP hizo una presentación para Digg a principios de este año que cubre las mejoras de rendimiento dadas por HipHop. En resumen, no es mucho más rápido que optimizar el código y usar una caché de código de bytes. HipHop es una exageración para la mayoría de los usuarios.

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

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


2
Tenga en cuenta que todo el asunto del bytecode / vm en realidad no le compra nada sin un caché de bytecode externo (!). No entiendo por qué PHP sigue tirando el

Imagino que es un problema de alojamiento compartido. APC se incluye en PHP de forma predeterminada a partir del antiguo tronco basado en 6.0. No estoy seguro de si lo veremos por defecto en 5.4 o como se llame el nuevo tronco ...
Charles

Muchas gracias por la información. Desafortunadamente, no tengo un control profundo de mi servidor (está alquilado). ¿Es probable que los servidores web utilicen APC?
Bojangles

3
La mayoría de los proveedores de alojamiento compartido no utilizan APC. Debe buscar en un servidor privado virtual para poder controlar la configuración. Los VPS suelen ser más costosos que el alojamiento compartido normal, pero mucho menos costosos que un servidor dedicado real. Los proveedores de VPS populares incluyen Slicehost y Linode. ¡No olvide que primero debe realizar evaluaciones comparativas y crear perfiles de su código !
Charles

15

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

O algo más como memcached


18
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

5
Memcached es una forma perfectamente cromática de mejorar el rendimiento ... después de realizar evaluaciones comparativas y perfiles y establecer que el almacenamiento en caché en sí mismo será la mejor ganancia de rendimiento posible.
Charles

1
Si está utilizando PHP 5.5, no necesita instalar ningún caché de código de operación porque ahora viene con él de forma predeterminada.
firewall

1
De hecho, busqué cromulent :(. Estoy de acuerdo con los demás, usar memcached en este contexto es engañoso. El almacenamiento en caché de datos como parte del proceso de compilación no es lo mismo que el código de operación resultante.
Mike Purcell

3

Con algo de reescritura (nombres de variable más cortos) podría ahorrar algunos bytes de memoria, pero eso también rara vez es significativo.

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


3

Esta es menos una respuesta que un anuncio. He estado trabajando en una extensión de PHP que traduce los códigos de operación Zend para que se ejecuten en una máquina virtual con escritura estática. No acelera el código PHP arbitrario. Le permite escribir código que se ejecuta mucho más rápido de lo que permite PHP normal. La clave aquí es la escritura estática. En una CPU moderna, un lenguaje dinámico se come la penalización por errores de predicción de rama a izquierda y derecha. El hecho de que las matrices PHP son tablas hash también impone un alto costo: muchos errores de predicción de las ramas, uso ineficiente de la memoria caché, precarga de memoria deficiente y ninguna optimización SIMD en absoluto. La predicción errónea de rama y los errores de caché en particular son el talón de Aquiles para los procesadores actuales. Mi pequeña VM evita esos problemas utilizando tipos estáticos y una matriz C en lugar de una tabla hash. El resultado termina funcionando aproximadamente diez veces más rápido. Esto está utilizando la interpretación de código de bytes. La extensión puede compilar opcionalmente 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 todos los interesados:

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

Nuevamente, la extensión no es un acelerador PHP general. Tienes que escribir un código específico para ello.


2

Sí, hay un punto (no técnico).

Su proveedor de alojamiento puede espiar su código en su servidor. Si lo minimizas y lo feas, es más difícil para los espías robar tus ideas.

Una razón para minificar y fealizar php puede ser la protección contra espías. Creo que el código feo debería ser un paso en una implementación automática.


1

Hay compiladores de PHP ... consulte esta pregunta anterior para obtener una lista; pero (a menos que tenga el tamaño de Facebook o esté apuntando su aplicación para que se ejecute en el lado del cliente) generalmente son muchos más problemas de los que valen

El almacenamiento en caché de código de operación simple le dará más beneficios por el esfuerzo involucrado. O perfile tu código para identificar los cuellos de botella y luego optimizarlo.


Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.