Salida de caché de contenido Caché PEAR
A continuación, comenzamos a explorar las tecnologías de almacenamiento en caché más utilizadas, que también es el foco de este artículo. Primero usamos el paquete de caché en PEAR. PEAR puede almacenar en caché contenido en archivos, bases de datos o memoria. Tomemos archivos como ejemplo.
Aquí hay un pequeño programa PHP que no utiliza almacenamiento en caché:
pear_content_cache1.php
<?php
echo "Este es el contenido. <P>";
echo "La hora actual es" fecha('MdY H:i:s A', hora()) "<BR>";
?>
El programa anterior es muy simple, ahora le agregamos almacenamiento en caché.
pear_content_cache2.php
<?php
require_once 'Cache/Output.php';
//Establece el directorio de caché, que debe poder escribirse $cacheDir = './pear_cache';
$cache = new Cache_Output('file',array('cache_dir' => $cacheDir));
//Si la variable nocache está vacía, use el contenido en el caché //Si desea obtener el contenido más reciente, asígnelo a la variable nocache if (empty($_REQUEST['nocache']))
{
// Crear una ID de caché única // Solicitud + Información de cookies $cache_id = $cache->generateID(array('url' => $_REQUEST,'post' =>$_POST,'cookies' => $HTTP_COOKIE_VARS) );
}
demás
{
//Si desea obtener el contenido más reciente, el ID está vacío $cache_id = null;
}
//Compruebe si el contenido de la caché correspondiente al ID de la caché está disponible si ($content = $cache->start($cache_id))
{
// El caché ya existe, genera directamente y finaliza el script echo $content;
salida();
}
// El contenido no existe en el caché, genera contenido nuevo y lo escribe en el caché echo "Este es el contenido. <P>";
echo "La hora actual es" . date('MdY H:i:s A', time()) "<BR>"
// Escribe el contenido en el caché echo $cache->end();
?>
Actualice estos dos archivos respectivamente y encontrará que la hora en la línea "La hora actual es" en pear_content_cache1.php cambia con la actualización, mientras que esta línea en pear_content_cache2.php no cambia. Esto se debe a que pear_content_cache2.php utiliza el almacenamiento en caché para almacenar el contenido solicitado por el usuario en un archivo estático. Cuando el usuario vuelve a solicitarlo, se genera directamente desde el archivo sin necesidad de que un programa genere dinámicamente el contenido.
Para pear_content_cache2.php, si el usuario desea leer la información más reciente en lugar de la información anterior en el caché. Luego podrá acceder a él con http://…/pear_content_cache2.php?nocache=1 , lo que deshabilitará la función de almacenamiento en caché. Actualícelo y verá que la hora cambiará en consecuencia.
Para resumir el uso de la clase de almacenamiento en caché de contenido PEAR:
1. Al incluir el paquete PEAR, asegúrese de establecer la ruta correcta.
2. Contiene la clase de caché en Output.php
require_once 'Cache/Output.php'
; Establezca el directorio de caché
$cacheDir = './pear_cache';
confirme que se pueda escribir en este directorio. Los datos de la caché se escribirán en subdirectorios de este directorio.
4. Cree un objeto de caché de salida
$cache = new Cache_Output('file',array('cache_dir' => $cacheDir));
El primer parámetro indica que usamos un caché basado en el método "archivo", y el segundo parámetro es un cache Matriz asociada a directorios.
5. Genere un ID de caché único
$
cache_id = $cache->generateID(array('url' => $_REQUEST,'post' =>$_POST,'cookies' => $HTTP_COOKIE_VARS));
() método que proporciona una serie de información (URL, datos HTTP POST y cookie HTTP) para identificar de forma única esta solicitud y distinguirla de otras solicitudes.
6. Agregue una declaración de juicio lógico para ver si los datos de caché correspondientes a cacheID ya existen. Si existe, obtenga los datos y finalice el script.
si ($contenido = $cache->start($cache_id))
{
eco $contenido;
salida();
}
7. Coloque el código que genera contenido después de la declaración lógica anterior y finalice usando el objeto de caché.
echo $cache->end();
función caché de salida PEAR cache
PEAR no solo puede almacenar en caché el contenido de salida, sino también el resultado de llamar a una determinada función. Esta es una característica muy interesante si su programa usa una determinada función con frecuencia y el resultado de la llamada es el mismo, le sugiero que la pruebe, especialmente si esta función se ejecuta lentamente.
A continuación implementamos una llamada almacenada en búfer a slowFunction(), una función que se ejecuta muy lentamente.
<?php
require_once 'Caché/Función.php';
$cacheDir = './pear_cache/';
$cache = new Cache_Function('file',array('cache_dir' => $cacheDir));
$arr = array('manzana', 'pera', 'sandía');
$cache->call('slowFunction', $arr);
echo '<BR>';
$arr = array('manzana', 'pera', 'sandía');
función lenta($arr);
función función lenta($arr = nulo)
{
echo "Una función que se ejecuta muy lentamente: ( <br>";
echo "La hora actual es" fecha('MdY H:i:s A', hora()) '<br>';
foreach ($arr como $fruta)
{
echo "Me comí una $fruta <br>";
}
)
?>
El siguiente es el resultado de la ejecución del script del ejemplo:
una función que se ejecuta muy lentamente.
La hora actual es el 28 de julio de 2004 a las 17:15:57 p.m.
Me comí una manzana, me comí una pera, me comí una sandía.
Una función que se ejecuta muy lentamente :(
La hora actual es 28/07/2004 17:17:55 p.m.
Comí una manzana, comí una pera, comí una sandía.
En el código, la clase Cache/Function.php se usa para realizar la función de almacenamiento en búfer. La variable $cache es un objeto Cache_Function que utiliza el almacenamiento en caché de funciones basadas en archivos y se almacena en el directorio $cacheDir. Para almacenar en caché una llamada de función, el método call() del objeto Cache_Function $cache debe usarse así: $cache->call('slowFunction', $arr
Aquí, se llama a la función slowFunction() y el parámetro)
;es una matriz $arr. Esta función se almacena en caché en un archivo en el directorio $cacheDir. Cualquier llamada posterior a esta función tendrá el resultado de la ejecución de la función devuelta por $cache->call(). El almacenamiento en caché y el uso de funciones son muy similares al almacenamiento en caché de contenido, por lo que no entraré en detalles. Consulte el manual de PEAR para obtener más detalles.