Este artículo presenta soluciones prácticas para la optimización, el almacenamiento en búfer y la compresión de PHP.
Como lenguaje de programación web popular, la mayor ventaja de PHP es la velocidad. PHP4 lo ha hecho muy bien y difícilmente se puede encontrar un lenguaje de programación más rápido que este. Pero si la carga de su aplicación es pesada, su ancho de banda es relativamente pequeño o hay otros cuellos de botella que afectan el rendimiento de su servidor, entonces también puede probar algunas de las recetas que le he recetado para ver si funcionan.
1. Optimización de código
Cuando se trata de optimización de código, puede pensar en un código limpio y claro, pero este no es el significado de este artículo, porque si desea buscar velocidad, debe realizar los ajustes correspondientes en el código fuente PHP. En términos generales, los comentarios redundantes se eliminan para que el código sea ilegible. Pero para un programador con buenas cualidades esto es sencillamente increíble. Afortunadamente, Zend Technologies ha lanzado Zend Optimization Engine para ayudarle a hacer esto. Ahora es gratis, pero debes seguir la licencia de Zend Optimizer. Este producto puede optimizar el código intermedio generado por el motor.
Instalar este motor es relativamente sencillo. Después de descargar la versión correspondiente a la plataforma, descomprime el archivo comprimido, luego agrega las siguientes dos líneas al archivo php.ini, reinicia el servidor web y listo.
zend_optimizer.optimization_level=15
zend_extension="/ruta/a/ZendOptimizer.so"
zend_loader.enable=Off
Si es una plataforma Win32, debería ser:
zend_optimizer.optimization_level=15
zend_extension_ts="C:ruta de endOptimizer.dll"
zend_loader.enable=¡Desactivado
! ¿Eso no es un error? ¿Por qué tres líneas? En realidad, la tercera línea es opcional. Dado que parece que desactivar zend_loader puede mejorar un poco la velocidad, vale la pena poner esta tercera línea en php.ini. Cabe señalar que el requisito previo para desactivarlo es que no esté utilizando el programa de cifrado Zend.
2. Almacenamiento en búfer
Si queremos mejorar aún más la velocidad, debemos considerar el uso de tecnología de almacenamiento en búfer. Existen algunas soluciones alternativas, incluidas Zend Cache (versión beta), APC y Afterburner Cache, así como jpCache.
Los anteriores son todos módulos de búfer. Almacenan el código intermedio generado por la primera solicitud del archivo .php en la memoria del servidor web y luego devuelven la versión "compilada" para solicitudes posteriores. Debido a que esto reduce las lecturas y escrituras en el disco y todo el trabajo en la memoria, este proceso puede mejorar significativamente el rendimiento de la aplicación.
Hay muchos productos de este tipo disponibles, entonces, ¿a quién debería elegir?
Zend Cache es un buen producto comercial. Después de cargar esas grandes páginas PHP por primera vez, obviamente sentirá que la velocidad aumenta y el servidor reservará más recursos. Desafortunadamente, este producto cuesta dinero, pero en algunos casos no conviene escatimar dinero.
Afterburner Cache es un producto de Bware Technologies y actualmente se encuentra en versión Beta. Parece ser lo mismo que Zend Cashe, pero no puede lograr tan buenos resultados como Zend Cache, ni puede funcionar con el motor de optimización Zend, pero es gratuito. Entonces yo Este módulo se utiliza.
APC (Alternative PHP Cache) es otro módulo gratuito lanzado por Community Connect que parece estar listo para entornos de producción.
3. Compresión de contenido web
Para redes cada vez más pobladas, ahorrar ancho de banda es tan valioso como ahorrar agua. Según los estándares del IETF, la mayoría de los navegadores deberían admitir contenido comprimido mediante gzip. Esto significa que puede enviar contenido comprimido con gzip al navegador, y el navegador descomprimirá los datos de forma transparente.
mod_gzip es un módulo de Apache gratuito lanzado por Remote Communications, que puede comprimir contenido web estático y enviarlo al navegador. Para la mayoría de las páginas web estáticas, este módulo es adecuado. Aunque
la gente de la compañía Remotecommunications dijo que este módulo admite todo el contenido dinámico generado por mod_php, mod_perl, mod, etc., todavía no parece funcionar, a juzgar por la lista de correo mod_gzip, no se espera que este problema se resuelva. hasta el 1.3.14.6s.
Si queremos comprimir contenido dinámico, podemos usar class.gzip_encode.php, una clase PHP utilizada al principio y al final del script. Para todo el sitio web, se llaman las funciones en auto_prepend y auto_append de php.ini. Para más detalles puedes leer el programa de esta clase. Este programa está bien comentado y el autor te cuenta casi todo. Pero antes de usarlo, su PHP debe estar compilado para admitir zlib.
Para PHP 4.0.4, una nueva solución es usar ob_gzhandler, que puede lograr el mismo efecto que la clase anterior. Simplemente agregue la siguiente oración a php.ini:
output_handler = ob_gzhandler;
Esto permite que PHP active el almacenamiento en búfer de salida y comprima toda la salida. Si hay alguna razón especial por la que no desea que todo el contenido se comprima y se genere, puede agregar la siguiente línea al archivo .htaccess para comprimir los archivos en el directorio correspondiente.
php_value output_handler ob_gzhandler
también se puede agregar directamente en el código PHP:
ob_start("ob_gzhandler");
Esta tecnología de compresión es muy efectiva, pero para los usuarios de Netscape Communicator parece incompleta porque no puede comprimir archivos gráficos. ¿Cuál es el problema? ¿La compresión de archivos jpeg y gif? IE no tiene este problema.
Conclusión:
El uso de las técnicas analizadas en este artículo debería mejorar el rendimiento de su sitio web, pero tenga en cuenta que:
- PHP puede no ser la causa del cuello de botella, verifique otras causas (por ejemplo, la base de datos)
- No puede maximizar el estado de rendimiento del servidor. Entonces, antes de quejarse de PHP y su almacenamiento en búfer, considere si es hora de actualizar su servidor o adoptar tecnología de equilibrio de carga dinámica (eso es mucho dinero).
- No subestime la compresión de contenido. Mientras ve mejoras en la velocidad de sus aplicaciones PHP en su intranet de 100 Mb, no olvide dónde se quejan los usuarios de su módem sobre sus páginas HTML de 100 Kb.