Profiler Erkenntnisse - Smarty

Deutschsprachiger Support für CMS Made Simple
Post Reply
Piratos

Profiler Erkenntnisse - Smarty

Post by Piratos »

Wer CMSMS einmal durch eine  Profiler laufen lässt, der wird feststellen, dass weit über 50 - 75 % der aufgewendeten Zeit mit Smarty verbraucht wird.
Ein interessantes Ergebnis.

Was macht die CMS eigentlich solange mit Smarty ?

Dazu müssen wir wissen, dass Smarty im Prinzip nichts weiter macht, als Platzhalter durch Inhalte zu ersetzen.

Die Platzhalter können direkte Variablen sein {$name} oder Plugins {name}, wobei Module nichts weiter sind als "aufgeblasene" Plugins.

Smarty ist ja eigentlich eine Templateengine.
Das bedeutet -  Platzhalter in einem Template werden gegen Inhalte getauscht.

Beispiel:

Template

Blah blah blah
{content}

Ende vom Template

So weit so gut.

Was aber passiert, wenn in den Inhalten von {content} sich weitere Platzhalter befinden ?

Normal - nichts - die in {content} enthaltenen Platzhalter würden unverändert in der Ausgabe erscheinen.

Nun kann man aber auch {content} als Template betrachten , um die darin enthaltenen Platzhalter gegen Inhalte zu tauschen muss {content} vor der Verarbeitung des eigentlichen Templates bereits mit Smafrty behandelt werden, damit da auch wirklich alle Inhalte erscheinen.

Auf diese Weise können z.B. Plugins die in {content} vorhanden sind inkl. der vom Plugin selbst verwendeten Templates verarbeitet werden.

Nun kann man das nicht in's endlose treiben - die Ausgaben der Plugins selbst sollten keine weiteren Platzhalter enthalten, deren Werte nicht bereits existieren.

Das bedeutet  - jeder Inhalt wird 1 mal durch Smarty gejagt und  dann das Haupttemplate und so erscheinen alle Inhalte in der Ausgabe.

Es gibt da nun verschiedene Methoden die möglich wären. Unter CMSMS wird alles in der Datenbank gehalten.

Smarty selbst kann von Haus aus selbst auf keine Datenbank zugreifen, bietet aber die Möglichkeit durch eigene Erweiterungen das zu bewirken.

Und so wird es auch gemacht.

Smarty holt sich die Inhalte aus der Datenbank und jagt sie durch seine Engine um am Ende das ebenfalls aus der Datenbank geholte Template durch seine Engine zu schicken.
Sind in {content} Platzhalter vorhanden die als Plugin (Module) ebenfalls auf die Datenbank zugreifen, dann wird das benau so erledigt.

Aber - der springende Punkt ist der  - wann ist es sinnvoll, einen Inhalt durch Smarty zu jagen ?
Doch eigentlich nur, wenn Platzhalter vorhanden sind.

CMSMS unterscheidet da nicht und jagt ALLES ohne Ausnahme durch Smarty.

Wann aber sind Platzhalter vorhanden  -  wie erkennt man sie ?

Nun man kann es so machen wie der Smarty Parser - das kostet aber zuviel Zeit.

Man kann es aber auch so machen, wie ich es z.B. bei Pisearch mache - Platzhalter sind vermutlich vorhanden, wenn der linke und rechte Delilimter (also { UND } ) im Inhalt vorhanden sind.

Und so kann man durch eine etwas intelligentere Steuerung sehr viel Zeit sparen, denn die Abprüfung nach den Delimitern läuft in wenigen Microsekunden, das pauschale Durchjagen eines Inhaltes durch Smarty dauert viele tausend Male länger.

Die Basis ist die Annahme, dass es ziemlich unwahrscheinlich ist, dass sich in jeder Inhaltsseite Platzhalter z.B. aus Plugins ooder Modulen befinden.
Pauschale Dinge gehören sowieso in's Template und nicht in Inhalte.

Um das generell machen zu können müsste man in der CMS Code umstellen:

1. Inhalt aus der Datenbank holen
2. Auf Delimiter prüfen
3. Wenn Delimiter vorhanden Inhalte aus dem RAM !!! durch Smarty jagen ansonsten nicht
4. Ausgabe

Wer meint, es gäbe nur die Seite als  Inhalt, der irrt - gibt es doch auch Blobs (globale Inhalte) und andere Dinge.

Und das witzigste an der Geschichte ist der, dass dieses Verfahren auch dann noch wesentlich schneller ist, wenn sich tatsächlich in jedem Inhalt ein Platzhalter befindet.
Post Reply

Return to “German - Deutsch”