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.
Profiler Erkenntnisse - Smarty
Deutschsprachiger Support für CMS Made Simple
Jump to
- Official Boards
- ↳ README FIRST!!!
- ↳ Announcements
- ↳ General Discussion
- Support Boards
- ↳ CMSMS Core
- ↳ Modules/Add-Ons
- ↳ Help Wanted (commercial)
- ↳ Translations
- Community Boards
- ↳ Tips and Tricks
- ↳ CMS Show Off
- ↳ Layout and Design (CSS & HTML)
- ↳ Feature ideas
- ↳ Developers Discussion
- ↳ The Lounge
- International Discussions
- ↳ Czech/Slovak - Česky/Slovensky
- ↳ Danish - Dansk
- ↳ Dutch - Nederlands
- ↳ Aankondigingen
- ↳ Tips en Trucs
- ↳ Vertalingen & Documentatie
- ↳ Hulp gezocht (commercieel)
- ↳ Finnish - Suomi
- ↳ French - Français
- ↳ German - Deutsch
- ↳ BITTE ZUERST LESEN !!!
- ↳ Ankündigungen
- ↳ Installation und Einstellungen
- ↳ Module und Tags
- ↳ Smarty-Tipps und -Tricks
- ↳ Layout und Design
- ↳ Suchmaschinenoptimierung (SEO)
- ↳ HowTo's
- ↳ Übersetzungen
- ↳ Show Off
- ↳ Hilfe gesucht (kommerziell)
- ↳ Stammtisch
- ↳ Hungarian - Magyar
- ↳ Italian - Italiano
- ↳ Moduli/Plugins
- ↳ Lithuanian - Lietuviškai
- ↳ Darbo / bendradarbiavimo pasiūlymai ir paieška
- ↳ Persian / Farsi
- ↳ Polish - Polski
- ↳ Portuguese - Português
- ↳ Russian - русский
- ↳ Предложения и поиск РАБОТЫ
- ↳ Spanish - Español
- ↳ Swedish - Svenska
- Geekmoot Editions
- ↳ Geekmoot 2016
- ↳ Connections and Conversations
- ↳ Geekmoot 2015
- ↳ Geek Moot 2012
- ↳ Locked: Geek Moot 2010
- Old Forums
- ↳ [locked] CMSMS 2.0 Beta
- ↳ Module Developers
- ↳ Closed Issues
- ↳ [locked] Documentation0ld
- ↳ Suggestions, Modifications & Corrections
- ↳ [locked] CMSMS 1.11 Beta
- ↳ Closed Issues
- ↳ [locked] CMSMS 1.10 Beta
- ↳ Closed Issues
- ↳ [locked] CMSMS 2.2 Beta
- ↳ [locked] CMSMS MLE fork
- ↳ Modules/Addon patchs
- ↳ [locked] Quality Assurance
- ↳ [locked] Accessability and Usability
- ↳ [locked] Documentation
- ↳ Media and presentations about CMSMS
- ↳ [locked] Installation, Setup and Upgrade