Allgemeine Fragen zu Contenido Funktionen

Edanis
Beiträge: 61
Registriert: So 13. Jun 2004, 15:08
Wohnort: Witten
Kontaktdaten:

Beitrag von Edanis » Sa 10. Sep 2005, 14:44

Hallo, nicht dass ich hier Werbung machen möchte oder ich dringendst das Feature bräuchte, hat mir nur was engefallen
i-fekt hat geschrieben: Sinn macht Caching immer, das von dir angesprochenes Uhrzeit-Modul ist relativ unrealistisch gewählt, da sowas zum einen nahezu nirgends im Web vorkommt.
Hier hast Du ein Beispiel: http://www.mystportal.com/Lexikon/front_content.php, rechts oben ist eine Uhr angebracht (doch, nur das Format ist in der unseren Welt nicht geläufig ;) ). Wenn jeder Besucher JS zulässt, darf diese Seite aber gecached werden, sonst würde da die falsche Zeit stehen.

Weitere Beispiele wären Newsticker, Börsenkurse ;) Umfragen und eigentlich alles was sich bei einer Webseite ändert wenn man aufs Aktualisieren klickt. Deshalb finde ich das Konzept, nur das PHP Code zu cachen eine ganz vernünftige Kompromislösung, da dabei die Vorarbeit mit Layoutverarbeitung und Variablenersetzungen gespart wird.

Ein guter Cache müsste eine statische Variante der Site erzeugen und an sie verweisen wenn der Inhalt sich nicht verändert hat. Aber das scheint eine nicht abschätzbare Menge von Hürden mitzubringen, zB. 'wie stele ich fest dass der Inhalt sich nich geändert hat' oder 'wie stelle ich sicher dass der Browser aus der verwiesenen statischen Seite korrekt herausnavigiert wird'.

BTW, wenn ich mich nicht irre, muss man bei Typo3 den Cache leeren da er nicht immer erkennt dass der Inhalt sich geändert hat.

Gruss, Edanis

i-fekt
Beiträge: 1520
Registriert: Mo 3. Jan 2005, 02:15
Wohnort: Chemnitz
Kontaktdaten:

Beitrag von i-fekt » Sa 10. Sep 2005, 15:22

Caching wird auf Elemente angewendet, dadurch kann man Sachen wie Umfragen oder eine Uhr nicht cachen.

Bei Typo3 muss man den Cache nicht löschen, nur wenn man Änderungen innerhalb der Cachzeit sehen will. Das Cachfile wir dann gelöscht, wenn nach Ablauf der vorgegebenen Cachezeit die Seite aufgerufen wird. Erst dann wird der PHP-Code durchlaufen und der Server belastet.

Wie gesagt, Caching macht IMMER Sinn und beschleunigt jede Seite - und je mehr Besucher desto wichtiger ist Caching.
Gruss,
Michael

"Keep on riding this Bike!" (Jackson Mulham)

timo
Beiträge: 6284
Registriert: Do 15. Mai 2003, 18:32
Wohnort: Da findet ihr mich nie!
Kontaktdaten:

Beitrag von timo » Sa 10. Sep 2005, 15:38

i-fekt: Nach wie vor gilt: Bei einem vernünftigen Konzept habe ich nichts dagegen. Meiner Ansicht nach gibt es derzeit keine Lösung, ein Resultatcaching, so wie du es haben möchtest, zu realisieren.

Bei einigen unserer größten Projekte mit wirklich einer Menge Module auf der Seite haben wir rund 5000 Besucher am Tag, und um die 10 Requests pro Sekunde - und der Server langweilt sich (Load von 0.02-0.10 im Durchschnitt).

Der Vergleich mit Typo3 hinkt übrigens, da es in Contenido so etwas wie Module nicht gibt.

i-fekt
Beiträge: 1520
Registriert: Mo 3. Jan 2005, 02:15
Wohnort: Chemnitz
Kontaktdaten:

Beitrag von i-fekt » Sa 10. Sep 2005, 16:44

Hi Timo,

ich versuche es mal, weiß nicht genau was du für Infos brauchst?

Ich bin vom CMS mit dem wir arbeiten her einen grundlegend anderen Aufbau gewohnt, ich schaue daher mal schnell wo man bei Contenido cachen könnte.

Ok, also das Caching würde ich in den Templates einbauen. Gecacht werden damit die Container. In der Vorkonfiguration stellt man also pro Container eine Cachezeit ein oder lässt sie leer, um den Container nicht zu cachen.

Ruft man nun eine Seite auf, wird kurz geprüft ob der darzustellende Container gecacht wurde und man sich noch in der Cachezeit befindet. Ist dies der Fall, wird aus der Datenbank das gecachte HTML des Containers ausgelesen. Es findet keine Abfrage der DB statt. Ist man ausserhalb der Cachzeit, wird das Moduls in dem Container ausgeführt.
Gruss,
Michael

"Keep on riding this Bike!" (Jackson Mulham)

timo
Beiträge: 6284
Registriert: Do 15. Mai 2003, 18:32
Wohnort: Da findet ihr mich nie!
Kontaktdaten:

Beitrag von timo » Sa 10. Sep 2005, 18:15

ähm das ist nicht vollständig....wie prüfst du ob die ausgabe eines moduls sich ändern wird? beispiel zeitmodul?

so wie du es darstellst ist das caching nicht brauchbar...zum vergleich: mein konzept damals war 10 seiten lang und hätte so erhebliche änderungen zur folge (sowohl änderungen in contenido als auch zusätzliche arbeiten für redakteur und entwickler), daß es sich nicht gelohnt hätte

ohne dir zu nahe treten zu wollen: du stellst dir das ganze viel zu einfach vor!

Dodger77
Beiträge: 3626
Registriert: Di 12. Okt 2004, 20:00
Wohnort: Voerde (Niederrhein)
Kontaktdaten:

Beitrag von Dodger77 » Sa 10. Sep 2005, 18:44

IMO macht in Contenido ein allgemeines Caching nicht soviel Sinn, das wird sonst arg komplex. Und wo soll man genau ansetzen?
Was man aber alles selbst machen kann:
  1. Mit einem PHP-Beschleuniger wie eaccelerator oder dem ionCube PHP Accelerator lässt sich doch schon einiges erreichen.
  2. Eine Optimierung der DB-Abfragen und/oder eine Reduzierung direkt in den Modulen bewirkt manchmal schon Wunder.
  3. Und wo liegt das Problem, in einem Modul, das relativ statisch ist und die DB stresst, ein eigenes Caching zu implementieren? Das lässt sich doch einfach selbst bewerkstelligen. Sogar das bei Contenido mitgelieferte PEAR-Paket liefert eine Cache-Klasse mit, so dass man sich da gar nicht um alle Details selbst kümmern muss.

emergence
Beiträge: 10645
Registriert: Mo 28. Jul 2003, 12:49
Wohnort: Austria
Kontaktdaten:

Beitrag von emergence » Sa 10. Sep 2005, 18:48

@timo
gibts das konzept noch irgendwo zum lesen ?
*** make your own tools (wishlist :: thx)

i-fekt
Beiträge: 1520
Registriert: Mo 3. Jan 2005, 02:15
Wohnort: Chemnitz
Kontaktdaten:

Beitrag von i-fekt » Sa 10. Sep 2005, 18:57

timo hat geschrieben:ähm das ist nicht vollständig....wie prüfst du ob die ausgabe eines moduls sich ändern wird? beispiel zeitmodul?
Pro Container 1 Modul, also cacht man dieses Modul einfach nicht.
Gruss,
Michael

"Keep on riding this Bike!" (Jackson Mulham)

timo
Beiträge: 6284
Registriert: Do 15. Mai 2003, 18:32
Wohnort: Da findet ihr mich nie!
Kontaktdaten:

Beitrag von timo » Sa 10. Sep 2005, 22:05

Pro Container 1 Modul, also cacht man dieses Modul einfach nicht.
ähm ja wie denn? du mußt doch irgendwie prüfen, ob die ausgabe von modul X seine ausgabe ändert oder nicht - also mußt du es ausführen

irgendwie habe ich das gefühl du hast die contenido-konzepte nicht verstanden...
gibts das konzept noch irgendwo zum lesen ?
ja irgendwo in der firma habe ich das noch. schlüsse aus dem konzept waren:

1. Der Entwickler muß pro Modul festlegen, ob sich die Modulausgabe pro Aufruf ändert, ob ein Änderungs-Handler an das System weitergibt ob sich etwas geändert hat (was Schachsinn wäre da hier ja selbst nochmal Code aufgerufen werden muß) oder ob die Ausgabe immer fest ist. Bei diesen Prüfungen müsste noch unterschieden werden, ob sich das ganze Mandanten-, Sprach-, Artikel-, Kategorie-, Modul- oder Templateabhängig auswirkt. Weiterhin muß der Entwickler festlegen, ob sich die Informationne Zeitabhängig ändern und bei welchen Events.

2. Die Contenttypen müssten angepasst werden, damit sie eine Information zurückliefern, ob etwas geändert wurde.

3. Aus der Fülle der Informationen von 1. und 2. muß dann entschieden werden, ob das Modul schlußendlich ausgeführt wird oder nicht - und die Prüfungen alleine dauern länger als das Modul einfach auszuführen.

Die logische Konsequenz aus dem Konzept war, daß diese Änderungen soviel Aufwand bedeuten (sodaß es sich nicht lohnt) und im Endeffekt gar nicht das gewünschte Resultat bringen. Und ich kann immer nur betonen, daß ich bisher noch keine Contenido-Seite gesehen habe, die Aufgrund von Contenido alleine langsam war (es sei denn, es wurden schlecht programmierte Module eingesetzt).

phpchris
Beiträge: 438
Registriert: Fr 28. Mai 2004, 16:07
Kontaktdaten:

Beitrag von phpchris » Sa 10. Sep 2005, 22:22

i-fekt hat geschrieben:
timo hat geschrieben:ähm das ist nicht vollständig....wie prüfst du ob die ausgabe eines moduls sich ändern wird? beispiel zeitmodul?
Pro Container 1 Modul, also cacht man dieses Modul einfach nicht.
Verstehe ich nicht ganz, redest du davon, dass alles außer die Module gecacht werden soll?

emergence
Beiträge: 10645
Registriert: Mo 28. Jul 2003, 12:49
Wohnort: Austria
Kontaktdaten:

Beitrag von emergence » So 11. Sep 2005, 10:00

ad. konzept

das ist schon ein etwas komplizierter ansatz es so zu machen...

wie wäre denn ein etwas einfacher ansatz...
wobei nur der entwickler entscheiden kann wo teile des modul codes gecached werden...

wobei einzelner code im modul einfach von platzhaltern umschlossen ist...

blödes beispiel:

Code: Alles auswählen

<?cache

echo "hello world";

?>
wird nach ersetzung der CMS_VALUE werte, wird obriger code einfach evaluiert...
das ergebniss ersetzt einfach die entsprechende passage im modul output und wird anschließend in die con_code geschrieben...

in der con code würde dann nur

hello world stehen anstelle des gesamten codes...

änderungen wären an sich minimal...

einsetzen ließe sich das ganze zb für das snippets modul.. das an sich ja den code ebenfalls evaluiert... der einzige unterschied der dann im modul gemacht werden müsste ist, das das ergebniss nicht evaluiert sondern wie echo ausgegeben werden muss...

die schlussendliche evaluierung erfolgt dann sowieso nur in der front_content.php

andere punkte wie das nicht alle variablen für den php code zur verfügung stehen würden, muss man bei der programmierung der einzelnen module selbst berücksichtigen...
*** make your own tools (wishlist :: thx)

i-fekt
Beiträge: 1520
Registriert: Mo 3. Jan 2005, 02:15
Wohnort: Chemnitz
Kontaktdaten:

Beitrag von i-fekt » So 11. Sep 2005, 17:31

phpchris hat geschrieben:
i-fekt hat geschrieben:
timo hat geschrieben:ähm das ist nicht vollständig....wie prüfst du ob die ausgabe eines moduls sich ändern wird? beispiel zeitmodul?
Pro Container 1 Modul, also cacht man dieses Modul einfach nicht.
Verstehe ich nicht ganz, redest du davon, dass alles außer die Module gecacht werden soll?
Timo und Co. bringen als Beispiel ein Modul, das eine Zeit zurückliefert. In der Vorkonfiguration muss daher nur zusätzlich ein Eingabefeld sein, in das man die Minuten einträgt, wie lange es gecacht wird bis es wieder durchlaufen wird. Bleibt das Feld im Container in der Vorkonfig. leer, wird es nicht gecacht. Damit gibt es mit diesem Zeitmodul kein Cachingproblem.
timo hat geschrieben:
Pro Container 1 Modul, also cacht man dieses Modul einfach nicht.
ähm ja wie denn? du mußt doch irgendwie prüfen, ob die ausgabe von modul X seine ausgabe ändert oder nicht - also mußt du es ausführen
Wieso denn, du musst doch einfach abfragen, ob eine Cachezeit eingetragen ist oder nicht. Falls ja wird es gecacht, falls nien nein. Was verstehst du daran nicht?

Es gilt wie immer das "Shit in, shit out" Prinzip. Cacht ein Entwickler alles kann auch etwas wie ein Zeitmodul nicht gehen und cacht er sinnloserweise ein Hello world-Script dann ist es halt auch unnötig.

Ob das Modul seine Ausgabe ändert während der Cachezeit ist ja unwichtig, bei entsprechend wichtigen Modulen setzt man diese aus oder sehr gering. Der neue Inhalt kommt erst nach Ablauf der Cachezeit wenn das Modul wieder ausgeführt ist.

Bevor du das als Unsinn hinstellst, es ist KEINER! Ich bin sicher keine große PHP und Datenbank-Leuchte, aber ich weiß durch die tägliche Arbeit mit "großen" CMS, wieso die solche Funktionen haben und sehe kein Argument, wieso das bei Contenido unsinnig wäre. Drücke ich mich so umständlich aus, dass es keiner versteht oder will es einfach keiner verstehen?
Gruss,
Michael

"Keep on riding this Bike!" (Jackson Mulham)

timo
Beiträge: 6284
Registriert: Do 15. Mai 2003, 18:32
Wohnort: Da findet ihr mich nie!
Kontaktdaten:

Beitrag von timo » So 11. Sep 2005, 19:07

nimm dir doch einfach mal ein x-beliebiges projekt. schalte das containerdebugging ein. schau dir die ausführungszeiten eines jeden moduls an. und dann erkläre mir, wie du bei einer ausführungszeit von 0.003 sekunden pro modul noch etwas cachen willst. die probleme, die durch usability entstehen, weil ein entwickler sich aufwendig um die pflege der cachingzeiten kümmern muß, oder ein redakteur diese eingeben muß. dann gibt es noch arten von modulen, wo es keine feste cachezeit geben darf, und das ist das, was ich oben erklärt habe.

tu dir doch selbst den gefallen und schau dir doch die zeiten erstmal an, bevor du hier vorschläge machst, die im kontext meiner meinung nach unsinn sind.

du darfst gerne ein caching einbauen, aber ich als entwickler werde so eine funktion nicht integrieren, da sie in meinen augen keinen sinn macht und nur sinnloses verblasen von manpower für ein feature ist, was nicht benötigt wird.

i-fekt
Beiträge: 1520
Registriert: Mo 3. Jan 2005, 02:15
Wohnort: Chemnitz
Kontaktdaten:

Beitrag von i-fekt » So 11. Sep 2005, 19:28

Ich gebs auf...
Gruss,
Michael

"Keep on riding this Bike!" (Jackson Mulham)

phpchris
Beiträge: 438
Registriert: Fr 28. Mai 2004, 16:07
Kontaktdaten:

Beitrag von phpchris » So 11. Sep 2005, 20:54

timo hat geschrieben:ich als entwickler werde so eine funktion nicht integrieren, da sie in meinen augen keinen sinn macht und nur sinnloses verblasen von manpower für ein feature ist, was nicht benötigt wird.
Sehe ich allerdings ähnlich.
Mit dem con_code-Konzept ist die Performance von Contenido schon einsame Spitze.
Bei anderen CMS, die ein Caching einsetzen ist es teilweise auch nur ein Work-around um deren schlechte Ladezeiten zu kaschieren (typo3).
Als Beispiel hat eine Typo3-Seite bei uns in der Firma mit relativ wenigen Extensions bei einem Aufruf 21 MB Speicher verschlungen!!!
Klar, dass bei solch einer Programmierung wie sie in Typo3 der Fall ist (zig-tausend Zeilen Code werden included, unzählige Klassen bei jedem Aufruf instanziiert) ein caching her muss.
Bei Contenido finde ich es allerdings nicht unbedingt notwendig.
Auch die größeren Projekte die mit Contenido laufen sind sehr performant.

Gesperrt