Note

The online documentation is produced by a web publishing technology created by us to read the documents origins in OpenOffice Writer (ODT) and Microsoft Word (docx) formats and produces native web and PDF versions. In this way we maintain Louder project documentation update and in sync on each of its formats.
Select a Language:
Componente GarbageCollector
Tabla de Contenido:
Introducción
El componente GarbageCollector permite de manera controlada comprimir ó eliminar datos del estado de persistencia y meta-datos de entidades almacenados en el administrador de sesión.
¿Porque usar este componente?
Los controladores que implementan el estado de persistencia proporcionan un potente método para mantener contextos de sesión que mejoran la experiencia de usuario en un determinando componente de la aplicación. El uso excesivo de múltiples contextos (múltiples controladores con estado de persitencia) podría sobrecargar la aplicación ya que todos los datos de persistencia son parcialmente cargados en cada petición.

Este componente puede detectar que contextos han expirado y liberar la memoria persistente utilizada aumentando el rendimiento de la aplicación.
Como funciona el GarbageCollector
El componente proporciona el método GarbageCollector::startCollect() que con base a una probabilidad predefinida invoca una rutina en busca de datos del estado de persistencia ó meta-datos de entidades que se consideren en des-uso ó expirados. La rutina del colector se ejecuta en 2 fases:
Fase de Compresión
Primero se localizan datos que no se hayan usado en un tiempo predefinido y se comprimen los datos usando zlib en nivel de compresión 5 (normal). En este caso no se actúa propiamente como recolector de datos en desuso pero da la oportunidad de re-utilizar los datos ahorrando espacio al mismo tiempo.
Fase de Eliminación
Cuando los datos han superado un tiempo de desuso pronunciado se procede a su eliminación. En el caso de los controladores persistentes básicamente se produce el efecto de reinicio de sus atributos y en el de los meta-datos de entidades se obliga a un nuevo volcado por parte de ActiveRecordMetaData.
Activar el GarbageCollector
Por defecto el garbage collector se encuentra desactivado para cualquier aplicación, su activación puede ser programacional ó declarativa.
Activación de manera programacional
La rutina de recolección puede ser invocada programacionalmente al finalizar una petición. Un plugin de aplicación resulta ideal para invocar el garbage collector. Se recomienda que la recolección se haga siempre al finalizar las peticiones ya que en este punto se asegura que los datos a liberar realmente esten en desuso ó expirados.
Ejemplo: Establecer las opciones del collector programacionalmente
<?php

class MyCollectorPlugin extends ApplicationPlugin {
     
     public function beforeFinishRequest(){
          //Expirar objetos que tengan más de una hora en desuso
          GarbageCollector::setCollectTime(3600);
          GarbageCollector::startCollect();
     }
     
}
Activación de manera declarativa
En el archivo config/config.ini es posible activar de forma declarativa el recolector mediante la siguiente configuración:
Ejemplo: Activar el collector desde el archivo de configuración config.ini
[application]
mode = development
name = "APPLICATION NAME"
debug = On

[collector]
probability = 100
compressionTime = 900
compressionLevel = 5
collectTime = 1800

La definición de la sección collector activa el componente GarbageCollector y su rutina de liberación de recursos es ejecutada al final de cada petición a la aplicación.
Parámetros del Collector
Los siguientes parámetros determinan el comportamiento del componente:
Tabla: Parámetros del componente GarbageCollector
Parámetro
Descripción
probabilityEs un número entero positivo que determina la probabilidad que la rutina de recolección se ejecute. El collector se ejecuta cuando un número aleatorio generado entre 1 y probability da exactamente en su mitad entera. Un número alto reduce la probabilidad y uno bajo la aumenta.
compressionTimeEs el tiempo que un objeto debe superar para que el colector lo comprima para ahorrar espacio. Por defecto es 900 segundos (15 minutos).
compressionLevelEs el nivel de compressión que se utilizara en la primera fase del colector. Es un entero entre 0 para cero compresión y 9 para máxima. Un número elevado aumenta los recursos utilizados para efectuar la operación pero reduce más espacio. La compresión se realiza usando el formato Zlib (ZLIB Compressed Data Format Specification version 3.3).Se requiere que la extensión de PHP zlib este disponible. Por defecto es 5.
collectTimeEs el tiempo que debe pasar un objeto en desuso para marcarse como expirado y realizar su posterior eliminación. Por defecto es 1800 segundos (30 minutos).

API de GarbageCollector
FALTA