wahsaga: Seiten Cachen - Macht das Sinn?

Beitrag lesen

hi,

Abgesehen davon: Ein Cache, den man nur manuell durch Löschen seiner Inhalte zur Aktualisierung bewegen kann, klingt in meinen Ohren nicht so Klasse.

Wer redet von manuellem löschen?

Wenn du nicht "alles" neu generieren willst, brauchst du ein Entscheidungskriterium, _was_ du neu generieren willst.

Du sprachst davon, die Seiten "beim Ausliefern" zu cachen.
Primitivster Weg wäre: Wenn angeforderte Seite XY nicht physisch im Dateisystem vorhanden, dann stelle die Inhalte zusammen, liefere sie aus, und schreibe sie anschließend auf Platte, damit sie für den nächsten Zugriff "gecached" vorliegen.
Nun musst du wegen einer Datenänderung neu generieren. Wenn es beim primitiven Mechanismus bleiben soll(!) - dann muss die physisch vorhandene Datei entfernt werden, da nur so eine Neugenerierung ausgelöst wird.

Wenn das System "intelligenter" sein soll, dann kommst du an den Punkt, den Sven anspricht - du musst die Gültigkeit einer vorhandenen Cache-Version überprüfen. Das Erstellungsdatum könnte dabei ein Kriterium sein. Dann musst du dieses aber bei _jeder_ Auslieferung überprüfen - dein Cache-Mechanismus muss also zunächst mal das Dateisystem befragen, wie alt denn eigentlich Datei XY ist, bevor er sie entweder ausliest und an den Client durchschleust, oder sie neu generiert.

Klingt für mich eher nach magelnden Definitionen worauf sich Änderungen beziehen.

Hast du eine "bessere"?

Abgesehen davon würde ich sagen, das du einfach falsch rum denkst. Es ist nicht die Aufgabe des Systems bei jedem Abruf auf komplizierte Weise zu ermitteln ob was geändert wurde, sondern es sollte andersrum sein: Nämlich das ändernde System markiert (in irgend einer Form) die geänderten Seiten und erzwingt damit eine seitenweise neuberechnung, wenn eine solche Seite abgerufen werden soll.

Mit "in irgend einer Form" handelst du hier den Punkt, der dafür am wesentlichsten ist, recht banal ab.

_Wie_ soll das gehen?

Soll es Aufgabe des Daten einpflegenden Nutzers sein?
Der weiß nicht unbedingt, wo sich die Änderung überall auswirkt,
der vergisst betroffene Dokumente,
der hat keine Lust, aus Dutzenden/Hunderten/... Dokumenten per Checkbox o.ä. die betroffenen auszuwählen.

Oder soll im System "hinterlegt" sein, welche Änderung sich wo auswirken könnte?
"Hinterlegt" in Anführungszeichen, weil auch das vermutlih nicht so trivial sein dürfte. Und wenn dein System hier zu viel Aufwand erzeugt, kommst du wieder an den von Sven angesprochenen Punkt, dass das System dem ändernden Nutzer zu viel Wartezeit abverlangt, bis seine Änderung wirksam wird.

Ja, aber bei deiner Lösung ist der zu parsende Code deutlich länger und komplexer. Das Cache-System selber wäre wahrscheinlich in ner Hand voll Zeilen zu realisieren.

Klar, oben angesprochenes "primitives" System sicherlich, auch mit zusätzlicher Überprüfung des Datums der Cache-Versionen.
Nur stellt sich die Frage, wie performant und vor allem "besser" es dann noch wäre - wie gesagt, diese Überprüfung hätte bei _jeder_ Anfrage zu erfolgen, andernfalls lieferst du u.U. veraltete Daten aus.

Stimmt alles, aber deine Cache-Version wird ja wohl auch kaum um Includes herumkommen. Das dürfte also kaum einen Unterschied machen.

Eben doch. Bzw. mit deutlich weniger auskommen da ja Teile der Programmlogik, die bei der simplen Version jedesmal ein include() und das einlesen einer Datenquelle erfordern würden, gar nicht mehr gebraucht werden sondern durch statische Ausgaben ersetzt wurden.

Wo kommen die "statischen Ausgaben" denn her, bzw. wo werden ihre Daten abgelegt?
Das Dateisystem dürfte dafür vermutlich immer noch der vergleichsweise günstigste Ort sein, jedenfalls wenn wir sowas wie "RAM-Disk" mal aussen vor lassen.
Also haben wir wieder Inhalte in Dateien, und diese müssen eingelesen werden. Ob du das jetzt "Include" nennst, oder bei reinen Datendateien sinnvollererweise in PHP eher readfile() benutzt, sei dahingestellt.

Nein. Datenbanken haben immer Caches, und der Ort ihrer Werkels hat auf dessen Inhalt keinen Einfluß.

Ja, das ist schon klar. Ich meinte damit das dann die eigentliche Abfrage nicht mehr der potentielle Engpass ist sondern das zurückliefern der abgefragten Daten. Dann fallen Datenbankabfragen noch weit deutlicher ins Gewicht und der DB-Cache hilft da auch nichts, sondern nur das Vermeiden der Abfragen.

Auch wenn Webserver und DB-Server getrennte Maschinen sind, dürften sie im selben Rechenzentrum stehen, und untereinander ausreichend gut angebunden sein. Da sehe ich weniger einen Flaschenhals.

gruß,
wahsaga

--
/voodoo.css:
#GeorgeWBush { position:absolute; bottom:-6ft; }