Visualizzazione dei risultati da 1 a 7 su 7

Discussione: caching e refresh

  1. #1

    caching e refresh

    Ciao

    Utilizzo uno script che salva la cache delle pagine in una cartella fisica nel server. Sfrutto la funzione ob_start(); per rigenerare la cache salvata. In pratica vado su index.php e in tmp viene generato il file "Uhsjde83no1nsd890qnswq-index" (md5 del nome della pagina + il nome della pagina in chiaro per una mia comodità). Quando scade (MISS) la cache viene aggiornata.

    Il risultato è che faccio query ad apache e al database solo alla prima visita. Finchè la cache non scade visualizzerò sempre uno "stamp" compresso in gzip. Uso più cpu ma risparmio in banda. La comodità, oltre che nel fare query ad apache/db una volta ogni 7 giorni (il sito è molto statico), è che c'è una cache per ogni pagina e non una specifica per ogni visitatore.

    Ho solo un problema di fondo e non capisco se sia normale. La cache si aggiorna/genera solo con il refresh della pagina e non mentre navigo tra di loro. Questa dovrebbe aggiornarsi se è scaduta e invece lo fa solo se è scaduta e qualcuno preme F5.

    La logica sarebbe questa: il 1° gennaio visito il sito e genero la cache. Dopo 10 ore torno nel sito e la cache non si aggiorna perchè non sono trascorsi 7 giorni. Passano 2 settimane e torno nuovamente nel sito. La cache dovrebbe aggiornarsi automaticamente ma non lo fa solo se premo F5.

    Ma che devo metterci un force refresh???
    Se serve posto il codice

  2. #2
    come invalidi il file in cache? hai qualche routine di garbage collection o ad ogni richiesta verifichi la data in cui è stato aggiornato il file?

  3. #3
    Questa è la parte interessata:
    codice:
    // verifico che il file esista e che non sia scaduto
    if(!file_exists($file)) return;
    if(filemtime($file) < time() - CACHE_TIME) return;
    
    // se esiste e non è scaduto lo visualizzo
    echo gzuncompress(file_get_contents($file));
    exit;
    }
    
    // altrimenti scrivo la cache
    function cache_page($content)
    {
    if(false !== ($f = @fopen(cache_file(), 'w'))) {
    fwrite($f, gzcompress($content));
    fclose($f);
    }
    return $content;
    }
    
    // l'esecuzione della pagina si ferma qui se viene trovata una cache valida
    cache_display();
    
    // altrimenti eseguo la pagina e credo la cache
    ob_start('cache_page');
    E' inteso che a fine pagina ho ob_end_flush();

  4. #4
    e cache_display come viene definita? cioè come fai a determinare il nome del file?

  5. #5
    Ah scusa l'ho tagliato fuori dall'if
    codice:
    // mostra il file cache se esiste e non è scaduto
    function cache_display()
    {
      $file = cache_file();
    
    // verifico che il file esista e che non sia scaduto
    if(!file_exists($file)) return;
    if(filemtime($file) < time() - CACHE_TIME) return;
    
    // se esiste e non è scaduto lo visualizzo
    echo gzuncompress(file_get_contents($file));
    exit;
    }
    
    // altrimenti scrivo la cache
    function cache_page($content)
    {
    if(false !== ($f = @fopen(cache_file(), 'w'))) {
    fwrite($f, gzcompress($content));
    fclose($f);
    }
    return $content;
    }
    
    // l'esecuzione della pagina si ferma qui se viene trovata una cache valida
    cache_display();
    
    // altrimenti eseguo la pagina e credo la cache
    ob_start('cache_page');

  6. #6
    ehm, ma riusciresti a mettere il codice di TUTTE le funzioni in questione? perchè mi domando ad esempio come cache_file() funzioni, senza neanche passare un parametro.

  7. #7
    codice:
    function cache_file()
    {
      return CACHE_PATH . md5($_SERVER['REQUEST_URI']) . CLEAR_PATH;
    }
    cache_path e clear_path sono due semplici define(); rispettivamente 'tmp' (la directory dove salvare la cache) e il nome della pagina corrente.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.