[TYPO3-german] TYPO3-PerformanceProblemebeimehrals2000angelegten Seiten -Warenkorb Overview wars

JoH info at cybercraft.de
Fri Jun 9 11:54:19 CEST 2006


>>> Ich hatte diesen über einen Marker so eingebunden:
>>> ### Warenkorb auf jeder Seite ###
>>> #seite.20 {
>>> #marks.WARENKORB < plugin.tt_products
>>> #marks.WARENKORB.code >
>>> #marks.WARENKORB.code = OVERVIEW
>>> #}
>>
>>
>> Tja, Du hast rein prinzipiell gesehen recht. Es liegt an tt_products
>> Ich hab mir gerade mal die sources von tt_products vorgeknöpft und
>> da steht an diversen Stellen:
>>
>> $TSFE->set_no_cache();
>>
>> Das ist absolut tödlich und vor allem unnötig.
>> Du kannst das aber relativ einfach abstellen:
>>
> Wie soll das funktionieren, wenn eine Seite mit Miniwarenkorb
> gecached wird? Sobald sich ein Produkt im Warenkorb befindet, darf
> auch die
> Listenansicht nicht mehr aus dem Cache kommen, weil ja die Anzahl der
> bereits gekauften Produkte im Eingabefeld stehen bleiben soll. Ggf.
> könnte man das umprogrammieren.
>
> Die SQL-Abfrage läßt sich beschleunigen, wenn keine Liste über alle
> Produkte erzeugt werden muß. Das geht durch die Verwendung der
> Kategorie tx_ttproducts_pi1[cat] als Parameter, der z.B. in der
> Kategorieliste automatisch mit übergeben wird.

Wir reden hier aber nicht von einer langsamen SQL-Abfrage, sondern vom
Ausbremsen eines gesamten Systems, nur weil auf der Seite an einer
bestimmten Stelle ein Warenkorb oder eine Liste angezeigt werden sollen.
Das mit der SQL-Abfrage war lediglich eine Vermutung, die einige hier
geäußert hatten, scheint aber nicht wirklich der alleinige Grund zu sein.
Mit $TSFE->set_no_cache(); hebelst Du den gesamten Caching Mechanismus der
Seite aus, weil diese so jedesmal komplett neu erzeugt werden muß.
Es kann ja wohl kaum sein, dass durch die Nutzung eines Miniwarenkorbs auch
sämtliche fetten Menüstrukturen, GIFBUILDER Elemente und andere Inhalte neu
erzeugt werden müssen, die mit dem Shop eigentlich gar nichts zu tun haben,
aber jedesmal ordentlich Performance fressen. Mal ganz abgesehen davon, dass
Du damit keinerlei Möglichkeit hast, Indexed Search einzusetzen.
Das ist vor allem deshalb unnötig, weil es ausreichen würde, nur die
dynamischen Elemente selbst (sprich: Die Liste, den Warenkorb oder was immer
an veränderbaren Shop-Elementen verwendet wird) neu zu erzeugen.

Aufbau ungefähr so

# Seite kommt aus dem Cache
page = PAGE
page {
    # Menu kommt aus dem Cache
    10 = HMENU
    # Content kommt aus dem Cache
    20 = CONTENT
    # Miniwarenkorb wird immer neu gebaut
    30 = COA_INT
    30.10 < plugin.tt_products
    30.10.code = OVERVIEW
    # Anderes Shop Element wird immer neu gebaut
    40 = COA_INT
    40.10 < plugin.tt_products
    40.10.code = WHATEVER
}

Das gleiche funktioniert selbstverständlich auch innerhalb der Ausgabe von
tt_products als plugin und zwar so, wie ich es bereits in meinem anderen
Posting gezeigt habe:

temp.tt_products < plugin.tt_products

plugin.tt_products >
plugin.tt_products = CASE
plugin.tt_products {
    key.field = select_key
    default = COA
    default.10 < temp.tt_products
    BASKET = COA_INT
    BASKET.10 < temp.tt_products
    FINALIZE < .BASKET
    TRACKING < .BASKET
    WHATEVER < .BASKET
}

Pack einfach alles in die Liste der COA_INT Elemente, was Deiner Meinung
nach dahin gehört.
Wenn Dir das zuviel Aufwand ist, mach meinetwegen ein COA_INT aus dem ganzen
Element, aber schmeiß auf jeden Fall die set_no_cache() Nummer raus!

Siehe hierzu auch:
http://lists.netfielders.de/pipermail/typo3-dev/2003-September/000477.html

Joey

-- 
Wenn man keine Ahnung hat: Einfach mal Fresse halten!
(If you have no clues: simply shut your knob sometimes!)
Dieter Nuhr, German comedian
openBC: http://www.cybercraft.de





More information about the TYPO3-german mailing list