domingo, 23 de octubre de 2011

Optimizar PHP con APC

Ya en una entrada anterior les dije que hablaría de la optimizacion de código en php, pero no les dije que código XD

Si así es se trata del opcode (operation code) que genera PHP al interpretar un script, algunos lo confunden con bytecode que no es así, el opcode es mas parecido al ensamblador y es el resultado del análisis y "compilación" del código fuente del script y a alguien se le ocurrió que se podía optimizar la ejecución de un script haciendo cache de dicho opcode, evitando la sobre carga de analizar y "compilar" en cada petición del servidor web el script, dejando en memoria RAM el opcode y sirviéndolo cada vez que se le requiera. Bendito el o los que se les ocurrió ya que esto era un verdadero punto en contra de PHP y que a cada rato los fanboys de java te restriegan en la cara jajaja pero bueno PHP tiene como principal fuerte la productividad a nivel negocio que puedes alcanzar con este maduro lenguaje cosa que no ocurre con JAVA, los tiempos de desarrollo en PHP son realmente aplastantes comparados con los de JAVA claro hablando de web, aunque si bien con esto PHP no alcanza a JAVA con sus servlets, si acorta considerablemente la brecha en desempeño que existía entre ambos. Pero ese no es el tema de este post así que al grano.

Hay mucho aceleradores de estos el mejor y oficial es el APC (Alternative Php Cache) así que hablaremos de este, ya que incluso sera incluido como parte de PHP en la versión 6 según los rumores :)

Básicamente existen 2 panoramas windows y linux, por ahora hablaremos de windows que este a su vez tiene otros 2 IIS y Apache.

Apache.

No tenemos mas que bajar la versión de APC que le corresponde a nuestro PHP desde aqui http://downloads.php.net/pierre/ nota NTS significa "non thread safe" y TS obviamente "thread safe" así que procedemos a descargar la nuestra, si tienes PHP en un todo en uno como Wamp o Xamp no hay pierde la versión que te corresponde es la TS.

Actualizacion: de esta oagina tambien se puede conseguir y mas actualizados los dll http://dev.freshsite.pl/php-accelerators/apc.html

ahora copiamos el archivo php_apc.dll en el directorio donde php carga las extensiones, ejemplo: C:\php\ext\ en Xampp es C:\xampp\php\ext\

luego procedemos a modificar nuestro php.ini, agregando las lineas

extension=php_apc.dll ;esto en la sección de extensiones
[APC] ;esto al final de tu php.ini aqui es donde podras controlar a APC
apc.enabled = 1
apc.shm_segments = 1
apc.shm_size = 64 ;aqui aumentamos la memoria en MB que se reserva para el cache
apc.max_file_size = 10M ;los script mas pesados que esto no seran cacheados
apc.stat=1


si quieres saber mas de como configurar tu APC ve aquí http://php.net/manual/es/book.apc.php

luego si quieres ver como funciona, puedes descargar el archivo apc.php desde aqui http://pecl.php.net/ package/APC en donde dice download latest en el tar que descarga (tendrás que usar winrar para poderlo habrir) se encuentra el código fuente por si te interesa, pero ahora solo nos importa el apc.php que lo colocamos en nuestro sitio y lo llamamos nos mostrara unas interesantes gráficas como esta:


IIS

Aquí usaremos Wincache en vez de APC y lo descargamos desde aqui http://www.iis.net/download/wincacheforphp en la parte superior derecha se encuentran los enlaces, el autoextraible nos pregunta donde extraer los archivos, le decimos donde y ahi encontraremos la dll el cual es "php_wincache.dll", seguimos exactamente los mismos pasos y en vez del apc.php tenemos el wincache.php obvio no? XD

El problema es que tu php tiene que ser NTS (non thread safe) y solo fastCGI :(

Espero que les sea útil, en el próximo post hablaremos de como instalar APC en linux.

Saludos.

No hay comentarios.:

Publicar un comentario