Domanda

File CSS e Javascript non cambiano molto spesso, quindi voglio essere memorizzati nella cache del browser web.Ma voglio anche il browser web per visualizzare le modifiche apportate a questi file senza che l'utente per cancellare la cache del browser.Anche desidera una soluzione che funziona bene con un sistema di controllo della versione Subversion.


Alcune soluzioni che ho visto prevedono l'aggiunta di un numero di versione per la fine del file sotto forma di una stringa di query.

Potrebbe usare SVN numero di revisione per automatizzare questo per voi: ASP.NET Display SVN Numero di Revisione

Si può specificare come si include il Revisione variabile di un altro file?Che è nel file HTML che posso includere il numero di Revisione nell'URL per il CSS o Javascript file.

Nel Subversion libro si dice di Revisione:"Questa parola chiave viene descritto l'ultima revisione in cui questo è stato cambiato nel repository".

Firefox permette anche premendo CTRL+R per ricaricare tutto su una pagina particolare.

Per chiarire io sono alla ricerca di soluzioni che non richiedono all'utente di fare qualsiasi cosa su di loro parte.

È stato utile?

Soluzione

Ho scoperto che se si aggiunge l'ultima modifica di timestamp del file alla fine dell'URL, il browser verrà richiesta il file dopo averlo modificato.Per esempio in PHP:

function urlmtime($url) {
   $parsed_url = parse_url($url);
   $path = $parsed_url['path'];

   if ($path[0] == "/") {
       $filename = $_SERVER['DOCUMENT_ROOT'] . "/" . $path;
   } else {
       $filename = $path;
   }

   if (!file_exists($filename)) {
       // If not a file then use the current time
       $lastModified = date('YmdHis');
   } else {
       $lastModified = date('YmdHis', filemtime($filename));
   }

   if (strpos($url, '?') === false) {
       $url .= '?ts=' . $lastModified;
   } else {
       $url .= '&ts=' . $lastModified;
   }

   return $url;
}

function include_css($css_url, $media='all') {
   // According to Yahoo, using link allows for progressive 
   // rendering in IE where as @import url($css_url) does not
   echo '<link rel="stylesheet" type="text/css" media="' .
        $media . '" href="' . urlmtime($css_url) . '">'."\n";
}

function include_javascript($javascript_url) {
   echo '<script type="text/javascript" src="' . urlmtime($javascript_url) .
        '"></script>'."\n";
}

Altri suggerimenti

Alcune soluzioni che ho visto prevedono l'aggiunta di un numero di versione per la fine del file sotto forma di una stringa di query.

<script type="text/javascript" src="funkycode.js?v1">

Si potrebbe utilizzare SVN numero di revisione per automatizzare questo per voi inserendo la parola LastChangedRevision nel file html dopo, dove v1 appare sopra.È inoltre necessario impostare il vostro repository per fare questo.

Spero che questo per chiarire ulteriormente la mia risposta?

Firefox permette anche premendo CTRL + R per ricaricare tutto su una pagina particolare.

A mio parere, è meglio per rendere il numero di versione parte del fascicolo, ad es. myscript.1.2.3.js.È possibile impostare il vostro webserver cache il file per sempre, e basta aggiungere un nuovo file js quando si dispone di una nuova versione.

Quando viene rilasciata una nuova versione di CSS o JS biblioteche, causa che si verifichi quanto segue:

  1. modificare il nome del file da includere una versione unica stringa
  2. modificare il file HTML che fa riferimento la libreria punto di versione del file

(questo è di solito un abbastanza semplice questione per una release script)

Ora è possibile impostare la Scadenza per la CSS/JS da anni nel futuro.Ogni volta che si modifica il contenuto, se il riferimento HTML punta a un nuovo URI, i browser non utilizzare più la vecchia copia memorizzata nella cache.

Questo provoca il comportamento della cache si desidera, senza richiedere nulla dell'utente.

Anch'io mi chiedevo come fare questo, quando ho trovato grom risposta.Grazie per il codice.

Ho lottato con la comprensione di come il codice è stato supposto per essere utilizzato.(Io non uso un sistema di controllo di versione.) In sintesi, è possibile includere il timestamp (ts) quando si chiama il foglio di stile.Non hai intenzione di cambiare il foglio di stile spesso:

<?php 
    include ('grom_file.php');
    // timestamp on the filename has to be updated manually
    include_css('_stylesheets/style.css?ts=20080912162813', 'all');
?>
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top