Frage

CSS-und Javascript-Dateien ändern sich nicht sehr oft, so dass ich will, dass Sie vom Internet-browser zwischengespeichert.Aber ich möchte auch den web-browser, um zu sehen, änderungen an diesen Dateien ohne die Benutzer zu löschen Ihres browser-cache.Wollen auch Sie eine Lösung, die gut funktioniert mit einem Versionskontrollsystem wie Subversion.


Einige Lösungen, die ich gesehen habe, beinhalten das hinzufügen einer Versionsnummer am Ende der Datei in der form einer Abfrage-string.

Könnte die SVN-Revisionsnummer, dies zu automatisieren für Sie: ASP.NET Anzeige SVN-Revisionsnummer

Sie können angeben, wie Sie die Revision variable von einer anderen Datei?Das ist in der HTML-Datei, ich kann die Revision-Nummer in die URL zur CSS-oder Javascript-Datei.

In der Subversion-Buch er sagt über Revision:"Dieses Schlüsselwort beschreibt die Letzte bekannte revision, in die diese Datei geändert, die im repository".

Auch Firefox ermöglicht es drücken STRG+R reload alles, was auf einer bestimmten Seite.

Um zu klären, Suche ich nach Lösungen, die nicht erfordern die Benutzer zu tun, alles auf Ihre Teil.

War es hilfreich?

Lösung

Ich fand, dass, wenn Sie hängen Sie den zuletzt geänderten Zeitstempel der Datei wird an das Ende der URL, die der browser die Anforderung der Dateien, wenn es geändert wird.Zum Beispiel 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";
}

Andere Tipps

Einige Lösungen, die ich gesehen habe, beinhalten das hinzufügen einer Versionsnummer am Ende der Datei in der form einer Abfrage-string.

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

Sie könnte verwenden die SVN-Revisionsnummer, dies zu automatisieren für Sie indem das Wort LastChangedRevision in Ihrer html-Datei nach, wo die v1 die oben angezeigt wird.Sie müssen auch Ihre setup-repository, dies zu tun.

Ich hoffe, dass dies weiter präzisiert meine Antwort?

Auch Firefox ermöglicht es drücken STRG + R reload alles, was auf einer bestimmten Seite.

Meiner Meinung nach ist es besser, um die Versionsnummer der Datei selbst z.B. myscript.1.2.3.js.Sie können festlegen, dass Ihr webserver-cache, um diese Datei für immer, und nur fügen Sie eine neue js-Datei, wenn Sie haben neue version.

Wenn Sie eine neue version des CSS-oder JS-Bibliotheken, führen Sie die folgenden auftreten:

  1. ändern Sie den Dateinamen, um eine einzigartige version string
  2. ändern Sie die HTML-Dateien verweisen auf die Bibliothek die Datei unter Versionskontrolle

(dies ist in der Regel eine ziemlich einfache Sache für einen release im Skript)

Jetzt können Sie den Ablauf für die CSS/JS zu sein, Jahre in der Zukunft.Wenn Sie die Inhalte, wenn Sie den verweisen auf HTML-Punkte zu einem neuen URI, Browser werden nicht mehr die alte zwischengespeicherte Kopie.

Dies bewirkt, dass die caching-Verhalten, das Sie möchten, ohne dass irgendetwas von dem Benutzer.

Ich wurde auch gefragt, wie Sie dies tun, wenn ich gefunden grom Antwort.Vielen Dank für den code.

Ich kämpfte damit, zu verstehen, wie der code verwendet werden soll.(Ich glaube nicht, verwenden eine version control system.) In Zusammenfassung, schließen Sie den timestamp (ts), wenn Sie rufen Sie das stylesheet.Sie planen nicht zum ändern des stylesheet oft:

<?php 
    include ('grom_file.php');
    // timestamp on the filename has to be updated manually
    include_css('_stylesheets/style.css?ts=20080912162813', 'all');
?>
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top