Ver índice de contenidos del libro

17.2. Guardando en la caché el cargador automático de clases

La edición estándar de Symfony2 utiliza por defecto la clase UniversalClassLoader en el archivo autoloader.php. Este cargador automático de clases es muy fácil de utilizar, ya que encuentra cualquier clase que se encuentre dentro de algún directorio registrado.

Desafortunadamente, la parte mala es que el cargador tiene que recorrer todos los namespaces registrados para poder encontrar el archivo que se está buscando. Para ello, realiza llamadas a la función file_exists() hasta que encuentra el archivo solicitado.

Una posible solución a este problema consiste en guardar en la caché la localización de cada clase después de encontrarla por primera vez. Symfony incluye una clase llamada ApcUniversalClassLoader que extiende UniversalClassLoader para guardar la localización de cada clase en la caché de APC.

Para utilizar este otro cargador de clases, modifica el contenido del archivo autoloader.php de la siguiente manera:

// app/autoload.php
require __DIR__.'/../vendor/symfony/src/Symfony/Component/ClassLoader/ApcUniversalClassLoader.php';
 
use Symfony\Component\ClassLoader\ApcUniversalClassLoader;
 
$loader = new ApcUniversalClassLoader('some caching unique prefix');
// ...

Nota Al utilizar el cargador automático con la caché de APC, si añades nuevas clases en la aplicación, se encontrarán sin problemas y todo funcionará igual que antes (es decir, no tienes que borrar la caché). Sin embargo, si cambias la ubicación de un determinado namespace o de un prefijo, tendrás que limpiar tu caché APC. De lo contrario, el cargador seguirá utilizando la ubicación anterior.