Wie kontrolliere ich das Caching für Releases mit PHP, Headern usw. für ein Backbone-Projekt?

8

Wir machen also wöchentliche Releases von unserem Projekt und es gibt Probleme mit Kunden, die alte veraltete Versionen bestimmter Dateien haben.

Der Stack ist Backbone mit Requires mit Backbone-Boilerplate und einem Apache2-Server mit PHP-Backend.

Wir haben die Index-HTML-Datei, die geladen wird, Vorlagen-HTML-Dateien, die mit AJAX geladen werden, und dann alle js-Dateien.

Diese Frage bezieht sich auf Ссылка , aber ich habe dort keine gute Antwort gefunden.

Ich habe gehört, dass cache-control-Header und Mod ablaufen und mod-Header für PHP hilfreich sein können, aber ich weiß nicht, wie man alles zusammenstellt.

Im Wesentlichen möchten wir sicherstellen, dass bei der Veröffentlichung von neuem Code auf dem Prod-Server sichergestellt wird, dass alles nicht mindestens einmal zwischengespeichert wird. Dahinter wäre ein normales Caching zur Erhöhung der Ladegeschwindigkeit ideal.

Zumindest würde ich mich darum kümmern, zu verstehen, wie man diese Dinge vollständig im Cache speichert.

Irgendwelche Ideen?

    
Evan 19.10.2012, 19:24
quelle

5 Antworten

5

Mit requirejs gibt es einen Parameter namens urlars , der hinzugefügt wird Parameter für alle Ihre Anforderungen und kann verwendet werden, um die Cache-Aktualisierung zu erzwingen. Das Beispiel auf der Seite verwendet einen Zeitstempel, aber Sie suchen wahrscheinlich nach einer Build-Version.

Sie sollten jedoch r.js verwenden, um eine Produktionsversion Ihrer Skripte zu erstellen (es kompiliert und minimiert alle mit require geladenen Dateien und erzeugt eine einzelne Bibliothek). Dies reduziert die Ladezeit und erspart Ihnen viele Sorgen. Sie würden sie nur diese eine Bibliothek verknüpfen und die Build-Version im Dateinamen selbst haben (so etwas wie backbone.app.1.0.23456.js).

    
nxtwrld 26.10.2012, 14:54
quelle
6

Ich habe es schwierig gefunden, den Browser des Benutzer-Clients zu kontrollieren, soweit es das Caching betrifft. Ein Trick, den ich in der Vergangenheit benutzt habe, ist, eine Zufallszahl an meine JS-Datei-URL anzuhängen. Wie

%Vor%

ODER

%Vor%

Das veranlasst den Client, es als eine neue Datei insgesamt zu behandeln. Sie können jeder Veröffentlichung eine Zufallszahl zuweisen, die dazu führt, dass die Browser Ihrer Benutzer die neue JS-Datei erneut abrufen. Gleiches gilt für CSS.

Ich hoffe, das hilft. Viel Glück.

    
Bryan Allo 19.10.2012 19:48
quelle
5

Das Caching von Dateien auf der Client-Seite wird durch zwei Werte definiert: eine Meta-Information im <head> -Abschnitt der aufgerufenen HTML-Datei und ein HTTP-Header.

In der HTML-Datei können Sie die beiden Meta-Tags cache-control und% angeben. co_de%, um ein wöchentliches Ablaufdatum durch einen einfachen PHP-Befehl zu definieren:

%Vor%

Dies würde den Cache am Montagmorgen töten. Eine andere Methode wäre die Cache-Einstellung über HTTP-Header :

%Vor%

Wenn Sie beide Methoden verwenden, werden Sie während der Woche zwischengespeichert, aber nach dem Wochenende werden die Clients ihre Caches ungültig machen und die Daten erneut aufräumen.

    
Lars 25.10.2012 12:54
quelle
5

Um das Zwischenspeichern von einer Seite zu entfernen, müssen Sie dies oben auf Ihrer Seite einfügen: -

%Vor%     
Sachin Prasad 26.10.2012 06:01
quelle
0

Das Anfügen einer Zufallszahl an die URL bricht das Client-Caching ab.
Hängen Sie stattdessen die letzte Änderungszeit der Datei an.

<script src="myjsfile.<?=filemtime('myjsfile.js')?>.js"></script>

Die Verarbeitung erfordert eine .htaccess-Regel, z. B.

RewriteRule ([^/]*)\.[0-9]*\.css$ .css [L,NC]

Außerdem sollten Sie .htaccess mit langfristigen Caching-Anweisungen versehen

%Vor%     
Alex 30.10.2012 11:45
quelle