concache zum Cachen der Frontendausgabe

kummer
Beiträge: 2423
Registriert: Do 6. Mai 2004, 09:17
Wohnort: Bern, Schweiz
Kontaktdaten:

Beitrag von kummer »

thanks steese. dann scheint das ja eine geniale lösung zu sein. jetzt fehlt eigentlich nur noch eine anpassung der artikeleigenschaften, damit man im artikel einstellen kann, ob eine seite gecached werden soll oder nicht.

dann probiere ich das ganze auch mal aus. vielen dank!
aitsu.org :: schnell - flexibel - komfortabel :: Version 2.2.0 (since June 22, 2011) (jetzt mit dual license GPL/kommerziell)
xmurrix
Beiträge: 3215
Registriert: Do 21. Okt 2004, 11:08
Wohnort: Augsburg
Hat sich bedankt: 4 Mal
Danksagung erhalten: 17 Mal
Kontaktdaten:

Beitrag von xmurrix »

silicone hat geschrieben:Hallo,
beim Versuch, dein Script in eine Contenido 4.6.8.5 auf Strato einzubinden hagelt es leider folgende Fehlermeldungen:
Kannst du damit etwas anfangen?
...
EDIT: Ist nicht die Version 4.6.8.5, sondern die 4.6.8.15 aus dem CVS...
Morgen,
falls das Problem nach dem Einbau des Caching aufgetaucht ist, dann liegt es am folgender Zuweisung in der concache.php:

Code: Alles auswählen

$cfgConCache['idoptions'] = array( 
    'uri'  => &$REQUEST_URI, 
    'post' => &$_POST, 
    'get'  => &$_GET 
); 
Das ist die einzige Stelle, an der Parameter per Referenz an eine Funktion übergeben werden. Ändere den Code einfach in

Code: Alles auswählen

$cfgConCache['idoptions'] = array( 
    'uri'  => $_SERVER['REQUEST_URI'], 
    'post' => $_POST, 
    'get'  => $_GET 
);
By the way @stese:
Danker für den Tip, $_SERVER['REQUEST_URI'] ist besser als $REQUEST_URI.

Nachtrag:
Auch in der front_content.php Zeile

Code: Alles auswählen

$oCacheHandler = new cConCacheHandler($GLOBALS['cfgConCache'], &$db);
in

Code: Alles auswählen

$oCacheHandler = new cConCacheHandler($GLOBALS['cfgConCache'], $db);
ändern. Das wars...

Gruß
xmurrix
Zuletzt geändert von xmurrix am Mi 5. Jul 2006, 09:51, insgesamt 1-mal geändert.
i-fekt
Beiträge: 1520
Registriert: Mo 3. Jan 2005, 02:15
Wohnort: Chemnitz
Kontaktdaten:

Beitrag von i-fekt »

kummer hat geschrieben:thanks steese. dann scheint das ja eine geniale lösung zu sein. jetzt fehlt eigentlich nur noch eine anpassung der artikeleigenschaften, damit man im artikel einstellen kann, ob eine seite gecached werden soll oder nicht.
Ich denke, dass es am sinnvollsten wäre, wenn in den Kategorien möglich wäre zu sagen, wie lange darin enthaltene Artikel gecacht werden sollen, da in der Regel in einer Kategorie immer gleiche Arten von Artikeln liegen.

Aber auf diesen Wunsch nach beliebigen Kategorieeigenschaften werde ich wohl noch lange warten müssen. :( ;)
Gruss,
Michael

"Keep on riding this Bike!" (Jackson Mulham)
xmurrix
Beiträge: 3215
Registriert: Do 21. Okt 2004, 11:08
Wohnort: Augsburg
Hat sich bedankt: 4 Mal
Danksagung erhalten: 17 Mal
Kontaktdaten:

Beitrag von xmurrix »

@kummer:
Das Caching erkennt selber nicht, ob die Ausgabe sich ändern würde. Ein Anhaltspunkt ist dafür das "createcode" Flag aus "con_art".
Auch durch die Kombination der Variable $cfgConCache['idoptions'] in concache.php wird die Scriptdynamik durch den Cache aufrechterehalten.
In der Cache-Klasse von PEAR (pear/Cache/Cache.php) gibt es die Eigenschaft var $gc_maxlifetime = 86400; für die maximale Verweildauer von gecachten Inhalten. Spätestens nach 24 Stunden werden gecachte Inhalte wieder gelöscht.

Um das Caching für einzelne Seiten auszuschließen, kann man einen Parameter mit übergeben. Allerdings würde ich nicht "force" verwenden, da dieser Parameter zwar dafür sorgt, dass das Caching nicht greift aber dafür wird jedesmal conGenerateCode aufgerufen.
Eine quick & dirty Lösung dafür ist z. B. eine Anpassung der in der concache.php

Code: Alles auswählen

/**
* activate caching of frontend output
* @var bool  $cfgConCache['enable']
*/
$cfgConCache['enable'] = true;
if (isset($_REQUEST['nocache']) && $_REQUEST['nocache'] == 1) {
    $cfgConCache['enable'] = false;
}
Ideal wäre es natürlich, das Caching direkt in Contenido zu Implementieren, um über Artikel- oder Kategorieigenschaften das Verhalten zu regeln.

Allerdings gibt es aber immer noch das Problem mit Modulen, die zufällige Ausgaben erzeugen oder mit Countern (wie chCounter).

Gruß
xmurrix
Wutz
Beiträge: 50
Registriert: Mi 2. Nov 2005, 00:49
Wohnort: München
Kontaktdaten:

Beitrag von Wutz »

Bekomme folgende Fehlermeldung:

Code: Alles auswählen

Fatal error: Error: Can't include Cache/Output.php in /www/htdocs/wutz/contenido/includes/api/functions.api.general.php on line 157
Ich habe in /wutz/cms/includes/ "class.concache.php" und "concache.php" gespeichert. In /wutz/pear/ habe ich den Ordner "Container" angelegt mit der Datei "file.php" darin und in /wutz/pear/ habe ich dan noch die vier dateien gespeichert. In der Front_Content habe ich die Änderungen zwei Codeteil ebenfalls eingefügt.
mvf
Beiträge: 1758
Registriert: Mo 1. Aug 2005, 00:35
Wohnort: in der schönen Hallertau, mitten im Hopfen
Kontaktdaten:

Beitrag von mvf »

Wutz hat geschrieben:in /wutz/pear/ habe ich dan noch die vier dateien gespeichert. In der Front_Content habe ich die Änderungen zwei Codeteil ebenfalls eingefügt.
und da liegt der hund begraben hatte ich auch, case sensitiv

nimm die vier wieder raus aus dem ordner pear/CACHE
lege einen neuen ordner pear/Cache oder kopiere den aus dem zip rüber so dass du am ende zwei chache ordner in pear hast Cache und den org CACHE
Grüsse, Guido

"A common mistake that people make when trying to design something completely foolproof is to underestimate the ingenuity of complete fools."
Mostly Harmless - Douglas Adams
stese
Beiträge: 1040
Registriert: Fr 3. Dez 2004, 17:47
Wohnort: München
Kontaktdaten:

Beitrag von stese »

kann es sein, dass er mir mit eingeschaltetem caching die statistiken nicht mehr durchgehend aktualisiert? kann mir das jemand bestätigen?
xmurrix
Beiträge: 3215
Registriert: Do 21. Okt 2004, 11:08
Wohnort: Augsburg
Hat sich bedankt: 4 Mal
Danksagung erhalten: 17 Mal
Kontaktdaten:

Beitrag von xmurrix »

stese hat geschrieben:kann es sein, dass er mir mit eingeschaltetem caching die statistiken nicht mehr durchgehend aktualisiert? kann mir das jemand bestätigen?
Stimmt,
auch die Statistiken werden nicht aktualisiert, da das Cache-Objekt die Ausführung der front_content.php mit der Ausgabe der gecachten Seite beendet.
Eine Möglichkeit wäre die Statisktik-Funktionalität in das Cache-Objekt einzubauen.

Gruß
xmurrix
stese
Beiträge: 1040
Registriert: Fr 3. Dez 2004, 17:47
Wohnort: München
Kontaktdaten:

Beitrag von stese »

eine andere lösung wäre vll. auch, die statistiken manuell anzustoßen, sobald cache aktiviert ist. das würde allerdings erfordern, dass man die statistik in dem falle auch wirksam unterbinden muss, nicht dass aufrufe doppelt gezählt werden, wenn der cache abgelaufen ist und neu generiert wird.
xmurrix
Beiträge: 3215
Registriert: Do 21. Okt 2004, 11:08
Wohnort: Augsburg
Hat sich bedankt: 4 Mal
Danksagung erhalten: 17 Mal
Kontaktdaten:

Beitrag von xmurrix »

stese hat geschrieben:eine andere lösung wäre vll. auch, die statistiken manuell anzustoßen, sobald cache aktiviert ist. das würde allerdings erfordern, dass man die statistik in dem falle auch wirksam unterbinden muss, nicht dass aufrufe doppelt gezählt werden, wenn der cache abgelaufen ist und neu generiert wird.
Wenn das Caching aktiv ist und das Cache-Objekt eine passende gecachte Ausgabe gefunden hat, wird der HTML-Code vom Cache mit die() ausgegeben. Danach geht nichts mehr...

Optional könnte die Funktion start() den gefundenen HTML-Code zurückliefern, dann kann man die Statistik auch aktualisieren. Hierbei ist dann das die() nachträglich anzugeben. z.B.:

Code: Alles auswählen

cInclude('frontend', 'includes/concache.php');
$oCacheHandler = new cConCacheHandler($GLOBALS['cfgConCache'], $db);
$cachedCode = $oCacheHandler->start();
if ($cachedCode != false) {
	// ok, code gefunden, aktualisierung der statistik
	...
	die($cachedCode);
}
Ich überlege mir was und werde die Statistik im Caching berücksichtigen...

Gruß
xmurrix
xmurrix
Beiträge: 3215
Registriert: Do 21. Okt 2004, 11:08
Wohnort: Augsburg
Hat sich bedankt: 4 Mal
Danksagung erhalten: 17 Mal
Kontaktdaten:

Beitrag von xmurrix »

Hallo zusammen,

nach dem Hinweis von stese, die Statistik wurde bei der Ausgabe von gecachten Seiten nicht aktualisiert, habe ich dies in das Caching mit reingenommen. Wird eine Cache-Version der Ausgabe ausgeliefert, kümmert sich das Cache-Objekt um die Aktualisierung der Statistik, ansonsten macht es der entsprechende Anweisungsblock in der front_content.php.

Zugleich wurde noch dem Caching ein Event-Handling verpasst, in dem man festlegen kann, welche Event-Handler ausgeführt werden sollen. Es stehen 2 Events zur Verfügung:
- 'beforeoutput': Code zum Ausführen, bevor die Ausgabe stattfindet
- 'afteroutput': Code zum Ausführen, nachdem die Ausgabe erfolgt ist

Die Aktualisierung der Statistik und Aufruf der page_close()-Funktion wird z.B. im 'afteroutput'-Event abgearbeitet...

Download der neuen Version: concache0.9

Grüße
xmurrix
stese
Beiträge: 1040
Registriert: Fr 3. Dez 2004, 17:47
Wohnort: München
Kontaktdaten:

Beitrag von stese »

danke scheint zu funzen.

ich habe die klasse cConCacheHandler noch etwas erweitert, dass bestimmte idarts nicht gecached werden. gleich an den anfang des cConCachHandler constructors folgende zeilen einfügen:

Code: Alles auswählen

// check if current article shouldn't be cached
    	  $sExcludeIdarts = getEffectiveSetting('cache','excludeidarts', false);
    	  if ($sExcludeIdarts && strlen($sExcludeIdarts)>0) {
    	  		$sExcludeIdarts = preg_replace("/[^0-9,]/","",$sExcludeIdarts);
    	  		$aExcludeIdart = explode(",",$sExcludeIdarts);
    	  		if (in_array($GLOBALS['idart'], $aExcludeIdart)) {
    	  			$this->_bEnableCaching = false;
               return;
    	  		}
    	  }
danach kann man in den mandanteneinstellungen folgende settings vornehmen:
Typ: cache
Name: excludeidarts
Wert: Idart, mehrere durch komma getrennt

diese idarts werden nicht durch den cache gejagt (für formulare oder ähnliches)
xmurrix
Beiträge: 3215
Registriert: Do 21. Okt 2004, 11:08
Wohnort: Augsburg
Hat sich bedankt: 4 Mal
Danksagung erhalten: 17 Mal
Kontaktdaten:

Beitrag von xmurrix »

ich habe die klasse cConCacheHandler noch etwas erweitert, dass bestimmte idarts nicht gecached werden. gleich an den anfang des cConCachHandler constructors folgende zeilen einfügen:
Super, die Ausnahmebehandlung für bestimmte Artikel ist den Contructor eingabaut und ist online - Danke dir für das Beisteuern der Funktionalität.

Langsam reift das Ding :D ...

Gruß
xmurrix
jost
Beiträge: 322
Registriert: Mo 10. Jan 2005, 20:12
Kontaktdaten:

Beitrag von jost »

Super Sache. Nur wird bei mir jetzt unten in der Ausgabe immer Hit/Miss und der entsprechende Zeitwert eingeblendet. Wo kann ich das ausstellen?
stese
Beiträge: 1040
Registriert: Fr 3. Dez 2004, 17:47
Wohnort: München
Kontaktdaten:

Beitrag von stese »

datei concache.php anschauen
Gesperrt