mod_cache

Diskussion zu nicht so umfangreichen Modulen und Start-Up für neue Module. Ansonsten bitte die speziellen Kategorien benutzen!

Artikel-Cache gefällig?

ja
10
100%
nein
0
Keine Stimmen
 
Insgesamt abgegebene Stimmen: 10

Benutzeravatar
MarkusR
Handbuchversteher
Beiträge: 7362
Registriert: 01.01.1970 01:00
Hat sich bedankt: 111 Mal
Danksagung erhalten: 934 Mal
Kontaktdaten:

Beitrag von MarkusR »

Matthias V hat geschrieben:wie wäre es, wenn mod_cache innerhalb des Parsers immer prüft, wann ein Artikel das letzte Mal verändert wurde und danach entscheidet, ob der Cache genommen wird, oder nicht?
Da der Cache beim Speichern des Artikel erzeugt wird ist der Cache zwangsläufig IMMER der letzte Stand, oder?

Schnittstelle (für die Ausgabe) ist select_template.php. So kann man den Parser ohne Beeinträchtigung auch für andere Zwecke nutzen (z.B. Newsletterversand), lediglich bei den ConPresso-typischen Seitenausgaben läuft es ja immer über select_template, das dann wiederum den Parser aufruft...

Für das Speichern ist dere Codeteil interessant, der save_article() aufruft. Genau dort wird dann auch der Cahce erzeugt. Wer also die ConPresso-Funktionen benutzt wird den Cache problemlos mitnutzen können...

Bis jetzt habe ich noch keine automatische Neuberechnung nach Templateänderung eingebaut, aber das ist das kleinste Problem (einen Schalter für einen kompletten Neuaufbau des Caches gibt es schon).
Ciao Markus
ConPresso-Module

Kein Support per PN!!! Für Fragen und Diskussionen ist das Forum da!

Succi recentis officinalis
Hochwertige Kräutersäfte und -Öle
Benutzeravatar
Matthias V
Modul-Entwickler
Beiträge: 1251
Registriert: 01.01.1970 01:00
Wohnort: Sondershausen
Hat sich bedankt: 54 Mal
Danksagung erhalten: 147 Mal
Kontaktdaten:

Beitrag von Matthias V »

MarkusR hat geschrieben:
Matthias V hat geschrieben:wie wäre es, wenn mod_cache innerhalb des Parsers immer prüft, wann ein Artikel das letzte Mal verändert wurde und danach entscheidet, ob der Cache genommen wird, oder nicht?
Da der Cache beim Speichern des Artikel erzeugt wird ist der Cache zwangsläufig IMMER der letzte Stand, oder?
Ich beziehe mich darauf, dass du den Cache eventuell erst beim Seitenaufruf generieren möchtest. In diesem Fall müsste man dann das Alter des Caches mit dem des Artikels vergleichen.

Aber die Cachegenierierung an save_article() zu hängen hört sich sehr sinnvoll an.
Manche Module sperrt dieses Vorgehen aber auch aus. Die möglicherweise den Parser benutzen, aber nichts als Artikel mittels save_article() speichern.
Gibt es überhaupt zur Zeit solche Module?? :gruebel:

Eine Neuauflage des Kontaktmoduls wäre ein Kandidat dafür.
... Aber stimmt, dein Modul könnte bei einem solchen Modul nicht erkennen, ob es nun den Cache nehmen soll oder nicht.
... Ich weiß auch nicht, ob die Geschwindigkeitsvorteile messbar wären
... eher nicht.
(naja, mann muss in einem Forum auch mal ins unreine denken dürfen)
mod_Guestbook 4.1.0

Features:
- Einträge als ConPresso-Artikel
- benutzt Templates, Rubriken, ...
- Captcha
- BB-Code + Smilies + Zitieren
- Badwords
- Anonymisierung
Benutzeravatar
MarkusR
Handbuchversteher
Beiträge: 7362
Registriert: 01.01.1970 01:00
Hat sich bedankt: 111 Mal
Danksagung erhalten: 934 Mal
Kontaktdaten:

Beitrag von MarkusR »

Matthias V hat geschrieben:
MarkusR hat geschrieben:
Matthias V hat geschrieben:wie wäre es, wenn mod_cache innerhalb des Parsers immer prüft, wann ein Artikel das letzte Mal verändert wurde und danach entscheidet, ob der Cache genommen wird, oder nicht?
Da der Cache beim Speichern des Artikel erzeugt wird ist der Cache zwangsläufig IMMER der letzte Stand, oder?
Ich beziehe mich darauf, dass du den Cache eventuell erst beim Seitenaufruf generieren möchtest. In diesem Fall müsste man dann das Alter des Caches mit dem des Artikels vergleichen.
Das eine schließt das andere ja nicht aus.
Auf jeden Fall wird der Cache derzeit beim Speichern angelegt und auch überschrieben.
Zusätzlich kann man (für nachträgliches Cachen) alle Artikel mit ihrem Standardtemplate cachen.
Das automatische Cachen für für noch nicht gecachte Artikel oder Artikel mit anderem Template (wie bei latest_news) habe ich gerade eingebaut. Der erste Seitenaufruf ist dann wie ein Schlag ins Gesicht (wenn noch nichts im Cache ist), aber das sollte ja nie passieren und ansonsten ein schleichender Prozeß sein, so daß neimand wirklich leiden muß :twisted:

Es wird überigens nicht save_article() selbst modifiziert (da fehlen einfach zu viele Umgebungsvariablen innerhalb der Funktion) sondern es ist einfach die nächste Zeile danach, so daß auch jeder Entwickler selbst entscheiden kann, ob er den Cache nutzt oder eben nicht...
Das sieht dann etwa so aus:

Code: Alles auswählen

-- [ FIND ] --------------------------------------
		save_article($data);

-- [ REPLACE WITH ] --------------------------------------
		// Artikelcache **********************************************************************************************
		$nr=save_article($data);
		if(array_key_exists('Cache', $activeModules))  include(CPO_BASEDIR.$activeModules['Cache']['directory'].'/i_cache.php');
 		// Artikelcache **********************************************************************************************
Ciao Markus
ConPresso-Module

Kein Support per PN!!! Für Fragen und Diskussionen ist das Forum da!

Succi recentis officinalis
Hochwertige Kräutersäfte und -Öle
Benutzeravatar
Marky
ConPresso-Checker
Beiträge: 382
Registriert: 11.12.2005 15:29
Hat sich bedankt: 29 Mal
Danksagung erhalten: 18 Mal
Kontaktdaten:

Beitrag von Marky »

MarkusR hat geschrieben:
Marky hat geschrieben:aber was wäre denn zu erwarten, wenn ich diese Artikel auch cachen lasse?
Ich kann nämlich nix Negatives erkennen. Im Gegenteil. Der Inhalt wird mit den Kommentaren ummantelt, dass er gecached wurde.
Na eben daß auch in 3 Jahren noch das Gleiche ausgegeben wird... :D

Von wegen "Aktuelles"... :wink:
ok. das ist tatsächlich so. Nur dann wäre mod_cache mit latest_news noch eine entscheidende Baustelle, wenn ich das mal so messerscharf folgern darf... 8)

Nachtrag: Mit Deinem vorherigen Post (Du warst gerade schneller...) hat sich das Problem dann ja erledigt ?!
Gruß
Marky
Benutzeravatar
MarkusR
Handbuchversteher
Beiträge: 7362
Registriert: 01.01.1970 01:00
Hat sich bedankt: 111 Mal
Danksagung erhalten: 934 Mal
Kontaktdaten:

Beitrag von MarkusR »

Marky hat geschrieben:... dann wäre mod_cache mit latest_news noch eine entscheidende Baustelle, wenn ich das mal so messerscharf folgern darf... 8)
Nein, mod_cache mit mod_latest_news geht. Nur die Verbindung mod_cache - mod_inline - mod_latest_news ist etwas schwierig.
Aber dann nimmt man einfach <!-- nocache --> dann wird der Artikel geparst und dabei mit dem gecacheten Inhalten von mod_latest_news gefüttert. Ist auf jeden Fall noch schneller als ein ganzes Dutzend Parser-Durchgänge...
Ciao Markus
ConPresso-Module

Kein Support per PN!!! Für Fragen und Diskussionen ist das Forum da!

Succi recentis officinalis
Hochwertige Kräutersäfte und -Öle
Benutzeravatar
MarkusR
Handbuchversteher
Beiträge: 7362
Registriert: 01.01.1970 01:00
Hat sich bedankt: 111 Mal
Danksagung erhalten: 934 Mal
Kontaktdaten:

Beitrag von MarkusR »

Matthias V hat geschrieben:wie wäre es, wenn mod_cache innerhalb des Parsers immer prüft, wann ein Artikel das letzte Mal verändert wurde und danach entscheidet, ob der Cache genommen wird, oder nicht?
habe das jetzt nochmal aufgegriffen...

da ich den Cachezeitpunkt mit aufzeichne ist dieser Vergleich gar kein Problem. Habe das mal eingebaut.
Ist nun AutoCache aktiviert, dann wird ein Cache dann erzeugt, wenn es noch keinen gibt oder wenn der Cache veraltet ist.
Ciao Markus
ConPresso-Module

Kein Support per PN!!! Für Fragen und Diskussionen ist das Forum da!

Succi recentis officinalis
Hochwertige Kräutersäfte und -Öle
Benutzeravatar
Matthias V
Modul-Entwickler
Beiträge: 1251
Registriert: 01.01.1970 01:00
Wohnort: Sondershausen
Hat sich bedankt: 54 Mal
Danksagung erhalten: 147 Mal
Kontaktdaten:

Beitrag von Matthias V »

MarkusR hat geschrieben:

Code: Alles auswählen

-- [ FIND ] --------------------------------------
		save_article($data);

-- [ REPLACE WITH ] --------------------------------------
		// Artikelcache **********************************************************************************************
		$nr=save_article($data);
		if(array_key_exists('Cache', $activeModules))  include(CPO_BASEDIR.$activeModules['Cache']['directory'].'/i_cache.php');
 		// Artikelcache **********************************************************************************************
Noch mal eine andere Idee zum überlegen:

Ich finde Module schwierig, bei denen man immer Code manuell bearbeiten muss. Das gibt bei Conpresso-Updates immer Probleme bzw. Mehrarbeit.
Am besten wäre es, wenn man das modul nur als Verzeichnis auf dem Webserver übertragen müsste und es übers Backend installieren kann.

Wie wäre es denn, wenn das Modul dahingehend in den Parsing-Prozess eingreift, dass man über Platzhalter am Anfang und Ende des Templates den Cache einbinden kann.
Genau habe ich das noch nicht durchdacht. Aber mit dem Platzhalter am Anfang könnte man prüfen, ob der Artikel schon gecacht wurde - in diesem Fall sollte der gesamte Inhalt des Templates durch den Cache ersetzt werden, um damit das Parsen abzuschließen/zu unterbrechen. Und mit dem Platzhalter am Ende könnte man das Ergebnis des Parsing-Prozesses in die Cache-Tabelle schreiben für den nächsten Seitenaufruf.

Das heißt bei der Installation des Moduls müsste man nur noch die Templates bearbeiten. Was sich allerdings auch durch das Modul nach vorheriger manueller Templateauswahl während der Installation automatisieren ließe.

Gruß Matthias
mod_Guestbook 4.1.0

Features:
- Einträge als ConPresso-Artikel
- benutzt Templates, Rubriken, ...
- Captcha
- BB-Code + Smilies + Zitieren
- Badwords
- Anonymisierung
Benutzeravatar
MarkusR
Handbuchversteher
Beiträge: 7362
Registriert: 01.01.1970 01:00
Hat sich bedankt: 111 Mal
Danksagung erhalten: 934 Mal
Kontaktdaten:

Beitrag von MarkusR »

Matthias V hat geschrieben:Ich finde Module schwierig, bei denen man immer Code manuell bearbeiten muss. Das gibt bei Conpresso-Updates immer Probleme bzw. Mehrarbeit.
Am besten wäre es, wenn man das modul nur als Verzeichnis auf dem Webserver übertragen müsste und es übers Backend installieren kann.
Das wäre ja schön wenn ConPresso sinnvolle Schnittstellen bieten würde...

tut es aber nicht, also muß man selbst eingreifen.

Ich habe ja schon ewig lange darauf gedrungen, daß die ConPresso-Funktionen nicht direkte Ausgaben liefern sondern die Ergebnisse als Variablen zur Verfügung stellen, die man manipulieren könnte. Klar kann man das puffern, aber dann sind das für jede Variable nochmal ein Dutzend Zeilen lustig im Originalcode verteilt.

Ich habe es ja schon soweit verändert, daß nur an drei, vier Stellen eine Zeile eingesetzt werden muß und ansonsten alles im Modulverzeichnis passiert.
Wem das zuviel Arbeit ist kann es ja lassen oder monatlich einen Fuffi für den Server drauflegen um die Performance zu steigern :wink:

Wenn es eine Lösung gibt, die nur durch den install-Button funktioniert, dann ist dieses offene Projekt ja gut geeignet, daß sich jemand dran versucht...
Will eigentlich jetzt noch jemand dran teilnehmen?

So sieht übrigens die komplette Anleitung aus:
-- [ OPEN ] --------------------------------------
_include/select_template.php

-- [ FIND ] --------------------------------------
if (!defined('CPO')) exit;

-- [ AFTER, ADD ] --------------------------------------
// Artikelcache **********************************************************************************************
if(array_key_exists('Cache', $activeModules)) include(CPO_BASEDIR.$activeModules['Cache']['directory'].'/select_template.inc.php');
if ($was_cached) return;
// Artikelcache **********************************************************************************************



-- [ OPEN ] --------------------------------------
_admin/articles.php

-- [ FIND ] --------------------------------------
save_article($data);

-- [ REPLACE WITH ] --------------------------------------
// Artikelcache **********************************************************************************************
$nr=save_article($data);
if(array_key_exists('Cache', $activeModules)) include(CPO_BASEDIR.$activeModules['Cache']['directory'].'/i_cache.php');
// Artikelcache **********************************************************************************************



-- [ OPEN ] --------------------------------------
_admin/templates.php

-- [ FIND ] --------------------------------------
// create a list of all placeholders in this template and add a positional counter for each.

-- [ BEFORE, ADD ] --------------------------------------
// Artikelcache **********************************************************************************************
if(array_key_exists('Cache', $activeModules)) include(CPO_BASEDIR.$activeModules['Cache']['directory'].'/templates.inc.php');
// Artikelcache **********************************************************************************************



-- [ OPEN ] --------------------------------------
the end of your global footer (or the template in mod_pages)

-- [ INSERT ] --------------------------------------
<?php if(array_key_exists('Cache', $activeModules)) include(CPO_BASEDIR.$activeModules['Cache']['directory'].'/cachelist.inc.php'); ?>


-- [ SAVE AND UPLOAD FILES ] --------------------------------------
Geht doch, oder?
Ciao Markus
ConPresso-Module

Kein Support per PN!!! Für Fragen und Diskussionen ist das Forum da!

Succi recentis officinalis
Hochwertige Kräutersäfte und -Öle
Benutzeravatar
Matthias V
Modul-Entwickler
Beiträge: 1251
Registriert: 01.01.1970 01:00
Wohnort: Sondershausen
Hat sich bedankt: 54 Mal
Danksagung erhalten: 147 Mal
Kontaktdaten:

Beitrag von Matthias V »

MarkusR hat geschrieben:Geht doch, oder?
Naja, muss man sich eben zentral notieren/dokumentieren, um es bei jedem Update von Conpresso erneut durchzuführen.

Mal sehen, ob ich mir das Modul die Woche oder am Wochenende mal anschaue. - je nachdem wie ich Zeit finde.
mod_Guestbook 4.1.0

Features:
- Einträge als ConPresso-Artikel
- benutzt Templates, Rubriken, ...
- Captcha
- BB-Code + Smilies + Zitieren
- Badwords
- Anonymisierung
Benutzeravatar
MarkusR
Handbuchversteher
Beiträge: 7362
Registriert: 01.01.1970 01:00
Hat sich bedankt: 111 Mal
Danksagung erhalten: 934 Mal
Kontaktdaten:

Beitrag von MarkusR »

Matthias V hat geschrieben:
MarkusR hat geschrieben:Geht doch, oder?
Naja, muss man sich eben zentral notieren/dokumentieren, um es bei jedem Update von Conpresso erneut durchzuführen.
Liegt als Readme.txt mit im Modulverzeichnis...

Außerdem bastele ich gerade an einem Patchfile, das die Änderungen wenn möglich selbst vornimmt...
Ciao Markus
ConPresso-Module

Kein Support per PN!!! Für Fragen und Diskussionen ist das Forum da!

Succi recentis officinalis
Hochwertige Kräutersäfte und -Öle
Benutzeravatar
MarkusR
Handbuchversteher
Beiträge: 7362
Registriert: 01.01.1970 01:00
Hat sich bedankt: 111 Mal
Danksagung erhalten: 934 Mal
Kontaktdaten:

Beitrag von MarkusR »

Mal der aktuelle Stand:

- das Modul arbeitet nun vollautomatisch
- ein paar neue Einstellmöglichkeiten:
* Cache abschalten (ohne Deinstallation)
* Automatischer Cache abschaltbar
* Das Markieren der Einträge (zum Prüfen der Funktion) ist abschaltbar, dann sieht die Seite (auch im Quelltext) aus wie zuvor
* die Intervallverarbeitung aus Newsletter und Bilderalbum erlaubt das Erstellen des gesamten Caches ohne den Server dabei zu killen
- das Modul modifiziert selbständig die ConPresso-Dateien und rekonstruiert diesen Stand auf Wunsch wieder
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
Ciao Markus
ConPresso-Module

Kein Support per PN!!! Für Fragen und Diskussionen ist das Forum da!

Succi recentis officinalis
Hochwertige Kräutersäfte und -Öle
Benutzeravatar
Marky
ConPresso-Checker
Beiträge: 382
Registriert: 11.12.2005 15:29
Hat sich bedankt: 29 Mal
Danksagung erhalten: 18 Mal
Kontaktdaten:

Laufzeiten

Beitrag von Marky »

Hallo zusammen,

ich habe auf unserem System die Version 4 des Moduls bzgl. den Laufzeiten untersucht -->

Kontext 1: Latest-News-Seite mit einer Anzeige von 10 Artikeln pro Seite und der Darstellung von archvierten und aktuellen Artikeln aus 22 Rubriken. Der Auftritt läuft mit Korrektur des Datums-Bugs!

Die Werte sind das Mittel aus 20 Aufrufen:

mit mod_cache: 0,5199s (Anzahl der Queries: 28 )

ohne mod_cache: 0,8510s ( Anzahl der Queries: 70 )



Kontext 2: Rubrikseite mit jeweils 10 Artikeln pro Seite

Die Werte verhalten sich bzgl. der Laufzeiten nahezu identisch zu der Latest-News Seite, so dass die Angabe von Testwerten nicht relevant ist.
Gruß
Marky
spyma
ConPresso-User
Beiträge: 25
Registriert: 29.08.2005 17:52
Hat sich bedankt: 2 Mal

Mod_Cache mit mod_Inline

Beitrag von spyma »

Hallo MarkusR,

dein Mod sieht sehr vielversprechend aus. Hier erstmal ein Lob von mir.

Ich teste es gerade und wollte fragen, ob die Problematik mit dem Inline-Modul noch besteht.

Über die Datailseite werden zwei Links mit Inline eingebunden.

- Drucklink
- Tell-a-friend

Die Verklinkung ist leider fehlerhaft

mit mod_cache aktiviert
-> http://www.[..].de/_rubrik/indexprint.php?rubric=ZEB-Aktuell

mit mod_cache deaktiviert
-> http://www.[..].de/_rubrik/detailprint.php?nr=20&rubric=ZEB-Aktuell&

Wie wäre es wenn man den Rubric-Index cachen könnte, aber die Detail-Seite so normal über den Parser laufen lässt.
Zuletzt geändert von spyma am 31.03.2008 13:19, insgesamt 1-mal geändert.
Benutzeravatar
MarkusR
Handbuchversteher
Beiträge: 7362
Registriert: 01.01.1970 01:00
Hat sich bedankt: 111 Mal
Danksagung erhalten: 934 Mal
Kontaktdaten:

Beitrag von MarkusR »

Grundsätzlich:

Alle Inhalte, die nicht durch den Artikel und das Template selbst generiert werden, sollten nicht gecached werden!
Dazu gehören Gallery, Tables, Inline etc.

Das vermeidet man durch Zusatz von <!-- nocache --> an beliebiger Stelle.

In meiner aktuellen Arbeitsversion werden einige davon bereits automatisch ausgeschlossen.
Wie wäre es wenn man den Rubric-Index cachen könnte, aber die Detail-Seite so normal über den Parser laufen lässt.
Da die Rubrikseiten sich viel häufiger ändern als die Detailseite ist das wenig effektiv.

Eigentlich dachte ich den Download wieder entfernt zu haben :oops: , da die fehlerhaft Verlinkung durch den vollständigem Cache diesen Linkfehler erzeugte.

Ich habe aber eine bereinigte Version, die ich Dir zur Verfügung stellen könnte.
Ciao Markus
ConPresso-Module

Kein Support per PN!!! Für Fragen und Diskussionen ist das Forum da!

Succi recentis officinalis
Hochwertige Kräutersäfte und -Öle
spyma
ConPresso-User
Beiträge: 25
Registriert: 29.08.2005 17:52
Hat sich bedankt: 2 Mal

Beitrag von spyma »

Jetzt funktioniert es.

Vielen Dank.
Antworten