Antes de desarrollar nuestro proyecto web es importante saber o calcular que tanto trafico tendrá para de esta manera planear nuestra arquitectura y claro dejando un hueco para la escalabilidad. Aun que existen diversas herramientas tanto para el código como para el hardware a veces no nos es posible implantarlas ya sea por limitaciones de nuestro servidor, arquitectura u otras circunstancias.
Pues bien el día de hoy les daré una orientación de como podemos escalar nuestra aplicación de manera sencilla, y sin agregar algún software adicional y claro mucho menos hardware, lo que haremos será implantan un sistema de cacheo.
La idea
Cada vez que recibamos una solicitud nuestra aplicación comprobara si esta se encuentra en cache de ser así, simplemente la leerá y la servirá evitando que se ejecute nuestro script (ejecutar consultas, construir el HTML, etc). en caso de no no encontrarse cacheada simplemente seguirá el flujo normal que será ejecutar dicho script.
para evitar que nuestra web se convierta una pagina estática, estableceremos un tiempo para actualizar la cache de una pagina.
en este ejemplo la cache se actualizara cada hora.
$timeout = 3600; // 1 Hora $file = '/tmp/cache/' . md5($_SERVER['REQUEST_URI']); if (file_exists($file) && (filemtime($file) + $timeout) > time()) { // Output the existing file to the user readfile($file); exit(); } else { // Setup saving and let the page execute: ob_start(); register_shutdown_function(function () use ($file) { $content = ob_get_flush(); file_put_contents($file, $content); }); }
Es importante tener en cuenta que el script anterior se basa en peticiones. por lo que si manejamos resultados en base a la sesión de usuario entonces deberemos registrar esta en la cache.
Para comprender mas el script puedes visitar la documentación de register_shutdown_function.
Un inconveniente de esta técnica de cacheo seria el espacio utilizado en disco, por lo que podremos implementar un script para que se encargue de la limpieza (recomendable ejecutar en las horas donde el trafico es menor).
En kumbiaPHP
KumbiaPHP implementa el sistema de cacheo para los partials, de no especificar el segundo parámetro nuestra vista no será cacheada.
View::partial('menu',1000);
El valor mínimo de tiempo en cache es de 1000 (un segundo).
En la invocación del partial. anterior se manda llamar al menú el cual se genera desde la base de datos, como no es muy común que cambien las opciones entonces no es conveniente hacer las consultas a la BD por cada petición así que mejor lo cacheamos. si vas al directorio temp/cache encontraras que este contiene el código HTML del menú.
basándonos en esta misma lógica es como funcionara el script, pero con la diferencia que esta cachea por petición.
Documentación del partial.
/** * Renderiza una vista parcial * * @param string $partial vista a renderizar * @param string $time tiempo de cache * @param array $params * @return string * @throw KumbiaException */ public static function partial($partial, $__time=FALSE, $params=array()) { ... }
Realmente KumbiaPHP tiene cache de partials, views y templates. Además se puede usar la clase cache en cualquier parte, además de poder usar diferentes motorores de cacheo.
No hay un tiempo mínimo de cacheo.
Para especificar el tiempo usa Internamente strtotime(), una función interna de PHP que es rápida y permite muchas funcionalidades.
Y no tenemos que reinventar la rueda, además te ser muy visual para saber cuanto tiempo estará cacheado, que no usando números crípticos.
Ejemplos:
“+1 hour”
“+1 day”
“+1 week”
“+1 week 2 days 4 hours 2 seconds”
“next Thursday”
“last Monday”
“10 September 2020”
….
Saludos Govani
Así es la cache de KumbiaPHP es impresionante y muy buena!!