Ya sabemos que Magento es una plataforma muy bien diseñada, extensible y muy versátil. Pero también es cierto que su rendimiento en determinadas configuraciones no es demasiado bueno. Esto es debido, entre otras cosas, a la gran cantidad de ficheros de código que ha de abrir y ejecutar en cada petición para componer una página de respuesta que mostrar al usuario. Esto hace que el tiempo que tarda magento en servir una página sea largo y que, en consecuencia, el número de peticiones por segundo sea bajo. Una buena forma de aumentar ese número de peticiones, es activar la cache de magento desde el menu ‘System->Cache Management’, allí seleccionamos ‘Enable’ en el desplegable y pulsamos sobre el botón ‘Save cache settings’.
Esta opción mejora el rendimiento de magento considerablemente, pero hay algo más que podemos hacer para mejorar ese rendimiento: Activar APC o Alternative PHP Cache.
APC es un modulo de PHP que implementa un sistema de cache de código intermedio, abierto y libre.
PHP es un lenguaje interpretado, eso quiere decir que los ficheros de código fuente se abren e interpretan cada vez que se necesita ejecutar algo. El interprete de PHP genera un código intermedio, llamado “opcode”, que se ejecuta y genera el resutado para el que se haya programado dicho código fuente. APC actúa de forma transparente, almacenando ese código intermedio en memoria y ejecutándolo cada vez que se solicita, de modo que no es necesario volver a abrir e interpretar los ficheros con el código fuente para ejecutarlos, con lo que se ahorra tiempo y accesos a disco, acelerando así de forma considerable la carga de la página.
Existen otras soluciones parecidas a APC con el mismo propósito, los llamados aceleradores de PHP, pero APC tiene una ventaja respecto a los demás a la hora de ayudarnos a mejorar el rendimiento de magento. APC dispone de un framework con el que podemos interactuar desde nuestro código php para mejorar esa ‘aceleración’, y magento está preparado para utilizar ese framework en el caso de que tengamos instalado APC en nuestro servidor.
Puesto que la instalación de APC es diferente dependiendo del sistema en el que estemos tranajando, no es posible explicar aquí su instalación para todo el mundo. En Ubuntu Hardy Heron, el sistema operativo de mi servidor, su instalación es muy fácil:
- Actualizamos la lista de paquetes ejecutando en un terminal lo siguiente:
sudo apt-get update
- A continuación instalamos los paquetes necesarios para la instalación de APC. De nuevo en un terminal:
sudo apt-get install php5-dev php-pear apache2-threaded-dev
- Lo siguiente es la instalación de APC en si ejecutando:
sudo pecl install apc
- Tras esto solo queda decirle a php que queremos utilizar APC para lo que añadiremos lo siguiente al archivo php.ini:
extension=apc.so [APC] apc.enabled = 1 apc.shm_segments = 1 apc.shm_size = 64 apc.max_file_size = 10M apc.stat=1
- Para que el cambio sea efectivo hay que reiniciar el servidor web.
- Por último, una vez reiniciado el servidor web y, por ello, activado el módulo APC, hay que decirle a magento que puede utilizarlo. Para ello se edita el fichero app/etc/local.xml y añadimos lo siguiente en la sección ‘global’:
<cache> <backend>apc</backend> <prefix>alphanumeric</prefix> </cache>De este modo de indicamos a magento que tiene disponible APC.
Para ver que efectivamente este cambio influye positivamente en el rendimiento de magento, hice una serie de pruebas con distintas configuraciones. Para realizar las pruebas, he sometido al servidor a sesiones de 100 peticiones con 5 usuarios concurrentes y he medido el tiempo medio de cada llamada así como el número de peticiones por segundo. A continuación os dejo con los resultados:
no APC no Cache = sin APC y sin la caché de Magento.
APC no Cache = sólo con APC.
no APC Cache = sólo con la caché de Magento
APC Cache = con APC y la caché de Magento.
APC XML no Cache = con APC activado en PHP y en Magento solamente
APC XML Cache = activado APC en PHP y en Magento y con la caché de Magento activada.
Como podeís ver el aumento del rendimiento con APC es notable.

