Condition vs. if

Armin Bartsch, Samstag, 20. März 2010

Wann Condition und wann auf if setzen

TYPO3 bietet zwei Möglichkeiten um Abfragen ausführen zu lassen; es stehen Condition und die Möglichkeit der if-Bedingungen zur Verfügung. Informationen zu den Möglichkeiten mit Condition sind unter typo3.org/documentation/document-library/core-documentation/doc_core_tsref/4.4.0/view/1/4/ und für die if unter typo3.org/documentation/document-library/core-documentation/doc_core_tsref/4.4.0/view/1/5/ zu finden. Weiter stehen noch override, fieldReqired und required als "Abfrage" zu Verfügung, die ich auch zu den if zählen würde.

Um die Unterschiede zwischen Condition und if und deren Auswirkung zu verdeutlichen ist es notwendig, kurz auf das Cachen von TYPO3 einzugehen.

Cachning

Ein großer Vorteil von TYPO3 ist, dass generierte/gerenderte Seiten gecachet werden. Die gerenderte Seite wird, sofern es die Konfiguration und die Extensionen zulassen, komplett in einer Tabelle gespeichert und stehen somit bei einem erneuten Aufruf zur Verfügung ohne komplett neu gerendert zu werden. Das spart Zeit und beansprucht den Server nicht bei jedem Aufruf einer Seite neu; das Rendering ist ein sehr intensiver Prozess und beansprucht den Server stark.
Es muss aber darauf geachtet werden, dass das Caching einer Seite nicht verhindert wird. Das Caching kann mit dem GET-Paramter no_cache = 1 , im TypoScript mit config.no_cache =1 oder in einer Extension mit $GLOBALS["TSFE"]->set_no_cache() verhindert werden. Allerdings empfehle ich das Caching nicht zu deaktivieren; nur in einer Testumgebung kann das Deaktivieren sinnvoll sein.

Wichtig an dieser Stelle zu erwähnen ist, dass die Bereiche der cObjecte USER_INT und COA_INT vom Caching ausgenommen werden und bei jedem Aufruf einer Seite neu gerendert werden. *_INT Objecte sind dann sinnvoll, wenn einige Bereiche einer Seite "voll" dynamisch sein müssen.

Condition

Erfüllt eine Condition die Bedingung wird die Ergebnisseite gecachet wenn ein solcher Aufruf erfolgt. Weiter wird die Seite gecachet die nicht die Bedingung erfüllt falls die Condition nicht erfüllt wird. Es werden also zwei Seiten in den Cache abgelegt obwohl nur eine Condition vorhanden ist. Je mehr Condition vorhanden sind desto mehr Seiten werden in den Cache gespeichert!

Wichtig ist, das die Condition bei jedem Aufruf einer Seite abgearbeitet/gerendert werden! Es wir bei jedem Aufruf entschieden, wie und welche Seite geliefert wird! Das ist ein entscheidender Unterschied zu den if, auf den ich folgend noch eingehen werde.

Condition müssen als TOP LEVEL OBJECT (TLO) angelegt werden.
Nicht zwischen geschweiften Klammern!

if

Die if werden direkt in TypoScript Elemente gesetzt, und nicht wie die Condition als TLO. Daraus ergibt sich, dass die if nicht bei jedem Aufruf neu abgefragt bzw. gerendert werden (außer wenn sich die if in einem *_INT cObject befindet).
Schlussfolgerung die sich daraus ergibt: Erfolgt ein Aufruf wird die if abgefragt und mit Ergebnis gerendert und im Cache gespeichert! Erfolgt ein weitere Aufruf, wird dieser ohne Prüfung der Bedingung aus dem Cache geladen!

Fazit

Das Caching-Verhalten von TYPO3 muss bei der Überlegung ob Condition oder eine if eingesetzt wird, einbezogen werden. Und in die Überlegung muss auch immer die *_INT cObjecte berücksicht werden!

Condition sollen eingesetzt werden wenn es erwünscht oder Pflicht ist eine Abfrage bei jedem Aufruf einer Seite auszuführen, die Seiten aber vollständig gecachet gespeichert werden sollen.

if kommt zum Einsatz, wenn die Abfrage nur ein Ergebnis zulässt was gecachet werden soll; außer man hat die if in ein *_INT cObject geschrieben.
Die *_INT cObjecten sollte man nur bei "voll" dynamischen Inhalten anlegen die bei jedem Aufruf zu einem anderen Ergebnis führen könnten.

Entwicklungsumgebung

TYPO Version:
4.3.1

Kommentare

Ins Gästebuch eintragen
Kein Kommentar vorhanden

MERKLISTE

Login

Anmelden

Sponsored by:

ideenwerft webhosting

Wunschzettel