Foros del Web » Programando para Internet » PHP » Zend »

Dudas sobre Zend Cache

Estas en el tema de Dudas sobre Zend Cache en el foro de Zend en Foros del Web. Hola chicos, tengo el siguiente caso. En mi sitio, tengo configurado un controlador, el cual, al utilizar por ejemplo esta url: mistio.com/buscador/cualquiercosa lo que hace, ...
  #1 (permalink)  
Antiguo 20/08/2008, 22:45
 
Fecha de Ingreso: mayo-2005
Mensajes: 257
Antigüedad: 19 años, 6 meses
Puntos: 1
Dudas sobre Zend Cache

Hola chicos, tengo el siguiente caso.
En mi sitio, tengo configurado un controlador, el cual, al utilizar por ejemplo esta url:

mistio.com/buscador/cualquiercosa

lo que hace, es buscar "cualquiercosa", en mi base de datos, y mostrar los resultados, en una tabla. (lo muestra utilizando un archivo llamado buscador.phtml ubicado en la carpeta view del controlador).

Ahora bien. quiro cachear, la busqueda, es decir, que la primera vez que busque algo, genere la pagina, y grabe esta pagina en una carpeta, para que asi la proxima, no busque en la base de datos y muestre directamente la pagina.

El problema es el siguiente, esto yo lo se hacer en php 4. Como estoy aprendiendo Php5 y Zend Framework se me ha complicado un poco, ya que no logro entenderlo.
Busqué en la documentacion del framework y encontre el siguiente codigo que al parecer funciona (creo yo) a lo que usaba en php 4.
Código PHP:
?php
// if it is a cache miss, output buffering is triggered

if (!($cache->start('mypage'))) {

    
// output everything as usual
    
echo 'Hello world! ';
    echo 
'This is cached ('.time().') ';

    
$cache->end(); // output buffering ends

}

echo 
'This is never cached ('.time().').'
Lo que no entiendo es lo siguiente, ¿éste código donde tendría que ponerlo?? En el controlador???. Cómo le digo al cache, que busque por ejemplo "cualquiercosa.html" y lo muestre?.

Estoy un poco perdido ya que no logro entenderlo del todo.

Desde ya muchas gracias por su ayuda, ya he aprendido bastante.
  #2 (permalink)  
Antiguo 21/08/2008, 01:21
 
Fecha de Ingreso: agosto-2007
Mensajes: 14
Antigüedad: 17 años, 3 meses
Puntos: 0
Respuesta: Dudas sobre Zend Cache

Hola,

Hace tiempo implemente un sistema de cache para mi web usando Zend_cacbe(los1000hijos.com). En el codigo del controlador cuya respuesta html quieres cachear tienes que hacer,con la cache debidamente inicializada:

Código PHP:
$cache->start(); 
La cache indexa las paginas según la url y otras factores configurables(sesión, cookies, etc). Es decir genera una pagina en cache para www.miserver.com y otra para www.miserver.com/noticias . Si miras el código del método start() verás que si encuentra una página valida lo último que hace es un die(), por este motivo el resto del código del controlador no se ejecuta. Este es mi controlador cacheado:


Código PHP:
public function indexAction()
    {
        
$ctx Zend_Registry::get('ctx');
        
$ctx->cacheStart();
        
$config =  Zend_Registry::get('config');
        
$sesion = new Zend_Session_Namespace($config->site->name);
        
$path $config->site->modulespath;
        
$blog = new Blog();
        
$respuesta $blog->seeNews();
        
$output prePage("blog");
        
$vista = new Zend_View();
        
$vista->setScriptPath($path."blog/views");
        if(
$respuesta->arrayNodos){
            
$output .= $vista->render("publileft.php");
            
$output .= '<div class="column span-17 last">';
            foreach(
$respuesta->arrayNodos as $indice => $nodo){
                
$vista->nodo $nodo;
                
$vista->baseUrl $config->site->webhost;
                
$vista->session $session;
                
$output .= $vista->render("divnew.php");
                }
        }
        
$output .= '</div>';
        
$output .= postPage();
        echo 
$output;
   } 
La clave está en que cuando haya un cambio en los datos(un input en la bbdd), has de invalidar las páginas de cache que puedan ser afectadas, si no los cambios en la permanencia no se reflejarán:

Código PHP:
$cache->clean(); 
La otra clave es inicializar bién la cache para que cachee correctamente las diferentes versiones de la pagina. Si a diferentes usuarios diferentes paginas, usa la sesión para diferenciar la página. Este es el código que inicializa mi cache:

Código PHP:
public function cacheInit(){
        if(
$this->enable != "true")
            return;
        try{
            
$config =  Zend_Registry::get('config');
        }
        catch(
Exception $e){
            throw new 
Zend_Exception('Se ha intentado inicializar la cache sin crear el objeto config');
        }
        
$time 86400;
        
$baseuri $config->cache->baserequesturi;
        
$frontendOptions = array(
              
'lifetime' => $time,
           
'debug_header' => true// for debugging
           
'default_options' => array(
           
'cache_with_session_variables' => true,
           
'make_id_with_cookie_variables' => false,
           
'make_id_with_session_variables' => true,
           
'cache_with_cookie_variables' => true
            
),
           
/*'regexps' => array(
               '^'.$baseuri => array('cache' => true),         // cache the whole IndexController
               '^'.$baseuri.'index/' => array('cache' => true),    // cache the whole IndexController
           )*/
        
);
        
$backendOptions = array('cache_dir' => './contexto/cache');
        
$this->cache Zend_Cache::factory('Page''File'$frontendOptions$backendOptions);
    
    } 
Como ves la definió para que use las variables de la sesión, además de la url, para generar la id de la página. Para ver una ejemplo funcionando visita los1000hijos.com. Al final de la pagina verás un pequeño flag amarillo que indica que la pagina está cacheada
  #3 (permalink)  
Antiguo 21/08/2008, 02:32
 
Fecha de Ingreso: mayo-2005
Mensajes: 257
Antigüedad: 19 años, 6 meses
Puntos: 1
Respuesta: Dudas sobre Zend Cache

gracias por responder, me ha quedado la siguiente duda, (voy a utilizar el primer metodo que me explicaste), es necesario poner ?
Código:
    $cache->end();
ya que en tu ejemplo no lo vi, y en la documentación esta puesto.

Saludos
  #4 (permalink)  
Antiguo 21/08/2008, 06:19
 
Fecha de Ingreso: agosto-2007
Mensajes: 14
Antigüedad: 17 años, 3 meses
Puntos: 0
Respuesta: Dudas sobre Zend Cache

Pues, no lo se. Supongo que así podrás dividir la respuesta y cachear un fragmento y otro no. Imprescindible no es, al menos con la versión 1.0 de Zend.
  #5 (permalink)  
Antiguo 21/08/2008, 08:05
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 6 meses
Puntos: 2135
Respuesta: Dudas sobre Zend Cache

Aunque creo si ves en la documentación lo que más te conviene en este caso es cachear los resultados de la BDD no la pagina completa en sí... Pero depende de tu proyecto
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 02:20.