View Issue Details

IDProjectCategoryView StatusLast Update
0000139Adventure PHP FrameworkNeues Feature // New Featurepublic2017-09-08 15:22
ReporterScreezeAssigned To 
PrioritynormalSeverityfeatureReproducibilityN/A
Status newResolutionopen 
Product Version2.0 
Target Version4.0Fixed in Version 
Summary0000139: HtmlHeader: JS/Css-Dateien&Pakete Versions-Pseudoparameter
DescriptionNach Updates, welche auch JS und CSS Dateien und Pakete ändern, hat man oft das Problem, dass im User-Cache noch eine alte Datei liegt, und Inhalte deshalb falsch dargestellt werden, oder Javascripte nicht mehr funktionieren.

Meine Idee zur Lösung des Problems wäre ein Pseudo-Parameter, welcher an die URL gehängt wird, und abhängig vom Inhalt der Dateien ist.
z.B. könnte hier der md5-Wert der Datei angehängt werden.
Ändert sich die Datei (oder das Paket) auf dem Server, ändert sich der MD5 Wert. Da dieser immer an die URL gehängt wird, lädt der Client die Datei anschließend automatisch neu herunter, weil er diese URL noch nicht kennt.

Beispiel:
http://localhost/BARF/?APF_extensions_htmlheader-action:JsCss=package:js.js|v:098f6bcd4621d373cade4e832627b4f6

Der Parameter muss Serverseitig nicht ausgewertet werden, er soll lediglich den Client dazu bewegen bei einem Update eine neue Datei zu laden.
TagsNo tags attached.
Codereferenz: ([Datei]:[Zeile])
Namespaceextensions

Activities

Screeze

2014-02-06 08:48

developer   ~0000199

Hab das mal kurz ausprobiert: Die ganze Datei aus dem Cache zu laden bei jedem Request ist ne blöde Idee. Ich würde stattdessen einen Kompromiss machen und die Dateigröße als indikator nehmen. ist zwar nicht 100%ig, aber besser. Änderungsdatum eines packages würde ein reload herbeiführen, jedesmal wenn der server-cache abläuft und neu generiert.
Denke Dateigröße wäre hier der performanteste Kompromiss.

Screeze

2014-02-06 08:54

developer   ~0000200

Denkfehler: filesize zu nehmen ist ebenso nicht praktikabel. Wenn Datei nicht vorhanden -> geht nicht.
Wenn Datei vorhanden aber eigentlich auf dem Server expired -> kein Gewinn
Und um letzteres zu prüfen muss ich doch wieder die ganze Datei laden.

Habt jemand eine bessere Idee?

Screeze

2014-02-06 08:59

developer   ~0000201

Idee:
Wir könnten beim Erzeugen des Packages den md5-Wert generieren und separat abspeichern, und dann diesen Wert einfach auslesen.
Das Problem der nicht vorhandenen Dateien können wir auf 2 Arten lösen:

1. random-Wert oder timestamp als version-parameter nehmen. Nachteil: Package wird dann zwar erst beim Abrufen generiert, und die Seite sofort ausgeliefert, aber dafür wird das Package beim nächsten Request noch einmal geladen, weil dann der Hashwert da ist.

2. Paket sofort generieren. Nachteil: Auslieferung der Webseite dauert länger, dafür wird das Paket nur einmal vom Client abgerufen, da der md5 Wert gleich zur Verfügung steht.

Würde zu Methode 2 tendieren, da so oder so gewartet werden muss, bis die Styles und JS Dateien da sind, um sinnvoll mit der Seite interagieren zu können.

Was haltet ihr von der Idee?

ChristianAchatz

2014-02-06 21:11

administrator   ~0000202

Effektiv ist der Parameter abhängig vom Faktor Zeit. Im besten Fall das Änderungsdatum der Dateien - bzw. der Summe der Dateien. Kannst du nicht einen Hash über die Zeitstempel der letzten Änderug der Dateien auf der Platte berechnen?

Screeze

2014-02-07 08:10

developer   ~0000205

Siehe mein 2. Kommentar: Dann wird jedes mal neu geladen, wenn auf dem Server der cache expired, auch wenn sich nix geändert hat.

ChristianAchatz

2014-02-08 11:07

administrator   ~0000207

Da hast du Recht! Um dieses zu umgehen nutze ich in mehreren Projekten jeweils den Zeitstempel des Builds der Software. Dieser ist eindeutig für eine definierte Version. Ebenfalls eindeutig ist die Versionsnummer. Soetwas könntest du doch in einer Konfigurationsdatei definieren und dann zur Ausspielung nutzen...

ChristianAchatz

2014-05-06 15:41

administrator   ~0000329

Postponed to 2.2 to close 2.1 soon.

ChristianAchatz

2015-09-05 17:07

administrator   ~0000596

Moved to 3.2 to shape scope for 3.1.

Issue History

Date Modified Username Field Change
2014-02-05 08:23 Screeze New Issue
2014-02-06 08:48 Screeze Note Added: 0000199
2014-02-06 08:54 Screeze Note Added: 0000200
2014-02-06 08:59 Screeze Note Added: 0000201
2014-02-06 21:11 ChristianAchatz Note Added: 0000202
2014-02-07 08:10 Screeze Note Added: 0000205
2014-02-08 11:07 ChristianAchatz Note Added: 0000207
2014-05-06 15:41 ChristianAchatz Note Added: 0000329
2014-05-06 15:41 ChristianAchatz Target Version 2.1 => 3.0
2015-01-28 19:12 ChristianAchatz Target Version 3.0 => 3.1
2015-09-05 17:07 ChristianAchatz Note Added: 0000596
2015-09-05 17:07 ChristianAchatz Target Version 3.1 => 3.2
2016-03-23 14:01 ChristianAchatz Target Version 3.2 => 3.3
2016-11-27 19:10 ChristianAchatz Target Version 3.3 => 3.4
2017-09-08 15:22 ChristianAchatz Target Version 3.4 => 4.0