Questions & Answers

SOLVED
j_mueller
Elite Observer

Caching Problem bei $CMS_INCLUDE(media:"...")$ innerhalb von Medien

Jump to solution

Hallo,

wir haben ein bei der Verwendung von $CMS_INCLUDE$ Anweiswungen innerhalb von Medien...

Der Gedanke war eine in einem Stylesheet weitere Stylesheets einzubinden bzw. zu includen und somit aus Performancegrรผnden in der gerenderten Seite nicht einzelne CSS Dateien laden zu mรผssen. Leider aktualisiert die Vorschau (auch bei forceRefresh) die Medien nicht korrekt wie es bspw. bei verschachtelten Absatz- und Formatvorlagen der Fall ist.

Ein Beispiel zur Reproduktion:

Seitentemplate:

{...}

<link rel="stylesheet" href="$CMS_REF(media:"combine_css")$" />

{...}

Medium combine_css:

$CMS_INCLUDE(media:"part_css", parse:true)$

Medium part_css:

/* beliebiges css */

Sieht man sich die Vorschau an, wird die Datei combine_css korrekt eingebunden. Darin wird nun auch korrekt der CSS Code des Mediums part_css angezeigt.

ร„ndert man allerdings etwas an der part_css und lรคdt die Vorschau neu, wird immer der alte Inhalt der combine_css angezeigt.

Erst wenn man das aufrufende Medium combine_css neu abspeichert wird eine neue Version der Datei erzeugt und die ร„nderungen aus den 'includeten' Medien werden รผbernommen.

Wie kann FirstSpirit dazu gebracht werden das Medium combine_css bei jedem Reload der Vorschau neu zu erstellen?

Schรถne GrรผรŸe

Julius

0 Kudos
1 Solution

Accepted Solutions
j_mueller
Elite Observer

Ich glaube ich habe es jetzt selbst lรถsen kรถnnen...

Die URL zur Datei sieht beispielhaft so aus:

/fs5preview/preview/12345/media/DE/current/6789/style.css

Wenn ich in der Datei den aktuellen Timestamp ausgeben lasse, bleibt dieser beim erneuten Aufruf der Datei immer gleich.

Wenn ich - sozusagen als hack - den Dateinamen im letzten Teil der URL รคndere, wird die Datei neu generiert (und damit auch die per CMS_INCLUDE eingebundenen Stylesheets richtig ausgegeben).

Fรผr FirstSpirit ist der Name nicht relevant, sondern die Parameter davor (Projekt-ID, Store, Sprache, Revision, StoreElement-ID). Wenn man sich an FirstSpirit 4 zurรผckerinnert war dort der Dateiname analog immer 'x.css'.

Nun habe ich mir eine kleine Formatvorlage erstellt, die mir das Link-Tag generiert und dabei in der Vorschau an die URL etwas anhรคngt:

$CMS_IF(!media.empty)$$--

    --$<link rel="stylesheet" href="$CMS_REF(media:media)$$CMS_VALUE(if(#global.preview,"_"+#global.now.timeInMillis+".css"))$" />$--

--$$CMS_END_IF$

Damit wird also glรผcklicherweise 'erzwungen', dass FirstSpirit die Datei neu generiert.

Vielleicht kann ja ein eSpirit Mitarbeiter (hoffentlich) nochmal bestรคtigen, dass dieses Vorgehen keine anderen Probleme nach sich zieht.

Schรถne GrรผรŸe

Julius

View solution in original post

0 Kudos
7 Replies
MarsDD
Occasional Observer

Hallo Julius,

einfach nach einer ร„nderung in der combine_css eine Leerzeile hinzufรผgen. Dann werden die Sourcen neu geparsed.

Nach der nรคchsten ร„nderung lรถschst Du diese einfach wieder. Und immer so weiter Smiley Wink

Viele GrรผรŸe

Marcel

0 Kudos

Hallo Marcel,

vielen Dank fรผr Deine Antwort.

Dass das funktioniert ist mir durchaus bewusst.

Erst wenn man das aufrufende Medium combine_css neu abspeichert wird eine neue Version der Datei erzeugt {...}

Ich halte das Vorgehen jedoch nicht fรผr die Lรถsung des Problems und sehe es bei der Entwicklung als รคuรŸerst unpraktisch an.

Schรถne GrรผรŸe

Julius

0 Kudos
MarsDD
Occasional Observer

Hi Julias,

wenn nicht, dann generiere doch in die combined_css einen dynamischen/random Wert hinein, das sollte theoretisch helfen Smiley Happy

Viele GrรผรŸe,

Marcel

0 Kudos

Hallo Marcel,

kannst du mir anhand eines Beispiels erklรคren wie du das meinst? Ich bin mir nicht sicher ob ich es richtig verstanden habe.

Ich denke FirstSpirit generiert fรผr die Vorschau eine Version der Datei und merkt sich dazu die Revisionsnummer. Solange die sich nicht รคndert und das ร„nderungsdatum der generierten Datei die normale Cache-Lebenszeit nicht รผberschreitet - oder so รคhnlich - wird die Datei eben aus dem Cache geladen und nicht neu generiert. Dann dรผrfte es auch keine Rolle spielen ob in der Datei Anweisungen stehen (was ja der Fall ist) oder statischer Text.

Schรถne GrรผรŸe

Julius

0 Kudos
j_mueller
Elite Observer

Ich glaube ich habe es jetzt selbst lรถsen kรถnnen...

Die URL zur Datei sieht beispielhaft so aus:

/fs5preview/preview/12345/media/DE/current/6789/style.css

Wenn ich in der Datei den aktuellen Timestamp ausgeben lasse, bleibt dieser beim erneuten Aufruf der Datei immer gleich.

Wenn ich - sozusagen als hack - den Dateinamen im letzten Teil der URL รคndere, wird die Datei neu generiert (und damit auch die per CMS_INCLUDE eingebundenen Stylesheets richtig ausgegeben).

Fรผr FirstSpirit ist der Name nicht relevant, sondern die Parameter davor (Projekt-ID, Store, Sprache, Revision, StoreElement-ID). Wenn man sich an FirstSpirit 4 zurรผckerinnert war dort der Dateiname analog immer 'x.css'.

Nun habe ich mir eine kleine Formatvorlage erstellt, die mir das Link-Tag generiert und dabei in der Vorschau an die URL etwas anhรคngt:

$CMS_IF(!media.empty)$$--

    --$<link rel="stylesheet" href="$CMS_REF(media:media)$$CMS_VALUE(if(#global.preview,"_"+#global.now.timeInMillis+".css"))$" />$--

--$$CMS_END_IF$

Damit wird also glรผcklicherweise 'erzwungen', dass FirstSpirit die Datei neu generiert.

Vielleicht kann ja ein eSpirit Mitarbeiter (hoffentlich) nochmal bestรคtigen, dass dieses Vorgehen keine anderen Probleme nach sich zieht.

Schรถne GrรผรŸe

Julius

0 Kudos
MarsDD
Occasional Observer

Hi Julius,

genau solch eine Lรถsung meinte ich mit der Aussage, einen Random-Wert in die Datei zu schreiben Smiley Wink

Viele GrรผรŸe

Marcel

0 Kudos

Hallo Marcel,

ja - nur nochmal zum Verstรคndnis: Es hat keinen Effekt innerhalb der Datei Werte per Templatesprache dynamisch zu setzen. Der Caching-Mechanismus von FirstSpirit sorgt dafรผr, dass die Datei - wenn sie einmal erzeugt wurde - gar nicht mehr neu eingelesen/generiert wird, sondern lediglich die Version aus dem Cache geladen wird.

Dass der Workaround/Hack mit dem ร„ndern des Dateinamens รผberhaupt funktioniert ist meiner Einschรคtzung nach Glรผck.

Der Dateiname wird vom System bei der Generierung nicht verwendet, allerdings scheint die URL sozusagen als Key fรผr den Cache zu dienen.

Dennoch vielen Dank fรผr die Mitarbeit!

Ich hoffe nur dieser Mechanismus funktioniert auch auf lange Sicht. Vielleicht meldet sich ja noch jemand von eSpirit zur Sache.

Schรถne GrรผรŸe

Julius

0 Kudos

Type a product name