Sometimes easytech developers need flying lessons.
After that we got a better kung-fu.
open source video, online video platform, video streaming, video solutions
Sometimes easytech developers need flying lessons.
After that we got a better kung-fu.
open source video, online video platform, video streaming, video solutions![]()
El concepto de cachear contenido es simple. Cada vez que generamos una pagina con contenido dinamicamente con PHP, lo que hacemos desde el lado del servidor es procesar los .php, estos generalmente tienen cierta logica, para generar el contenido que vamos a mostrar, como buscar en la base datos, llamar algun webservice, y depende el sistema mas o menos cosas. Con Zend_Cache nos evitamos de estos pasos.
Lo que hacemos con Zend_Cache, es generar el html(xml, json, etc) final, y almacenarlo en el file system. De esta manera cada vez que hagamos llamen a nuestra web vamos a llamar a nuestro html final, y no volver a generar el html que generamos en peticiones anteriores. Esto sirve para web donde el contenido no cambia constantemente.
Por ejemplo si tuvieramos un diario, como www.clarin.com.ar donde acceden millones de personas mensualmente, pero sabemos que el unico momento donde se cambia la portada es cuando aparece una nueva nota, aunque las paginas internas siguen siendo las mismas.
Para este caso es ideal algo como Zend_Cache, podemos Cachear toda portada, y cada una de las paginas internas, si desde la administracion se carga una nueva nota, se borra el cache anterior y se genera uno nuevo muy facilmente.
Pero hasta ahora solo vimos la teoria.
Manos a la obra
Lo primero que tenemos que hacer antes de cachear nuestras paginas es configurar como queremos que funcione Zend_Cache. En este ejemplo le vamos a dar un tiempo de vida determinado, vamos a indicarle donde queremos que almacene las paginas cacheadas, y vamos a decirle que actions y vistas queremos que cachee. Este codigo podemos ponerlo en nuestro bootstrap.
/**
* You should avoid putting too many lines before the cache section.
* For example, for optimal performances, "require_once" or
* "Zend_Loader::loadClass" should be after the cache section.
*/
$frontendOptions = array(
‘lifetime’ => 7200,
‘debug_header’ => true, // for debugging
‘regexps’ => array(
// cache the whole IndexController
‘^/$’ => array(‘cache’ => true),
// cache the whole IndexController
‘^/index’ => array(‘cache’ => true),
‘^/home’ => array(‘cache’ => true),
// we don’t cache the ArticleController…
// we don’t cache the ArticleController…
‘^/news’ => array(‘cache’ => true),
// we don’t cache the ArticleController…
// … but we cache the "view" action of this ArticleController
‘^/news/list/view’ => array(
‘cache’ => true
)
),
‘default_options’ => array(
‘make_id_with_post_variables’ => true,
‘make_id_with_cookie_variables’ => true,
‘cache_with_cookie_variables’ => true
)
);
$backendOptions = array(
‘cache_dir’ => ‘/tmp/zend_cache’
);
// getting a Zend_Cache_Frontend_Page object
$cache = Zend_Cache::factory(‘Page’,
‘File’,
$frontendOptions,
$backendOptions);
$cache->start();
?>
En este ejemplo estamos cacheando los controller news, home, index. Ademas le indicamos que el directorio para los files es /tmp/zend_cache (hay que crearlo!!)
Los tiempos que se reducen dependen de la cantidad de datos que busquemos en la base de datos, webservice, o que dependa de cierta logica.
Para un blog, o un portal con muchos hits diarios esto es indispensable al menos que tengamos hardware de sobra. En este blog yo uso WP-Cache de Ricardo Galli que hace lo mismo que Zend_Cache.
Cada vez que instanciamos un Zend_Db_Table, ZF hace un describe de la/las tablas que vamos a usar en nuestros query, recolectar esta info consume tiempo y recurso. ZF nos da la posibilidad de Cachear estos datos, usando Zend_Cache. Esto si bien podria estar como default, para reducir bastante los tiempos, no lo esta debido a que si cambiamos el nombre o datos de nuestra tabla, deberiamos limpiar el cache, y para evitar problemas que pueda llegar a generar esto no viene activo por default.
Si queremos hacerlo en nuestro sistema usando Sqllite la forma es muy simple. Basta habilitar sqllite en nuestro php.ini y crear una carpeta para que guarde este cache, podemos elegir la misma ruta que usamos para guardar nuestras paginas con Zend_Cache, todo esto es totalmente personalizable.
El codigo para que guarde la metada lo tenemos que aplicar antes de instanciar cualquier modelo, esto lo podemos hacer desde el bootstrap, pero tambien hay otras formas, cada uno puede implementar la forma que mas le convenga.
Los datos a continuacion tenemos que guardarlos en nuestro archivo de configuracion, yo uso los .ini en el ejemplo
config.ini
[metadata_cache]
frontend.automatic_serialization = true
frontend.lifetime = 3600
; Lugar donde vamos a guardar el cache
backend.cache_db_complete_path= “/tmp/zend_cache_db”
Y este es el codigo que deberia ir en nuestro bootstrap
bootstrap.php
<?php // ... Configuracion inicial // ... Ahora configuramos el cache $cache = Zend_Cache::factory( 'Core', 'Sqlite', metadata_cache->frontend, $config->metadata_cache->backend ); $cache->clean( Zend_Cache::CLEANING_MODE_ALL ); Zend_Db_Table_Abstract::setDefaultMetadataCache( $cache ); ?>
Enlaces
Documentacion oficial de Zend_Db_Table
Documentacion de webinar sobre acceso a la base de datos con Zend Db
En un acto de heroismo puro Cesar se presto para limpiar los filtros del aire acondicionado.
Una muestra mas que en Easytech, sobra coraje.
EvoLve theme by Theme4Press • Powered by WordPress easytech blog
sharing knowledge