Shopeinstellungen -> Rabatte / verlangsamt Listenansicht enorm

Hallo zusammen,

ich nutze einen OXID 6-CE-Shop. Nun habe ich mich einmal mit der Rabatt-Funktion beschäftigt. Sobald man Artikel im Shop mit dieser Funktioniert rabattiert, werden die Listenansichten enorm langsam. Anscheind wird dann im Hintergrund ständig etwas neu berechnet, was den Shop enorm verlangsamt.

Hat jemand von euch das gleiche Problem, bzw. kennt jemand das Verhalten?

Danke und schöne Grüße. :slight_smile:

Ich vermute, dass die Zuordnung über Datenbankabfragen realisiert ist. Schau Dir ggf. mal das Slow Query Log an. Eventuell fehlen Indizes oder sind kaputt.

Das eigentliche Problem an der Stelle ist, dass OXID derzeit noch für jeden Artikel in der Listenansicht alle Rabatte ausließt und dann für jeden Rabatt prüft, ob dieser zum Artikel passt. Bei bspw. 50 Artikeln auf einer Seite in einer Listenansicht und 100 Rabatten im Shop dann also 5000 Anläufe. Da die Artikel in der Listenansicht zudem noch aus Widget eingebunden sind, teilen sie sich nicht die Memorisierung der ausgelesenen Rabatte aus der Datenbank. Die 100 Rabatte werden also auch noch 50mal nacheinander ausgelesen, statt nur einmal.

Nach ein paar Laufzeittests liegt das Bottleneck nicht beim 100mal Auslesen der Rabatte, sondern dann später beim 5000mal prüfen, ob Rabatt und Artikel zusammenpassen.

Haben bei uns dann ein Modul umgesetzt, welches sich an DiscountList->getArticleDiscounts() klemmt und pro Artikel einen Cache der zugehörigen Rabatte in der Datenbank ablegt. Aus 5000 Vergleichen werden so also 50 bzw. sogar 0, wenn der Cache erst einmal aufgebaut ist.

Mag einer von euch dazu ein Ticket in https://bugs.oxid-esales.com/ anlegen? Sieht immer ein bisschen blöd aus, wenn wir das selber tun :wink:

Äh, nö :slight_smile:

Haben es, wie gesagt, in unserem Fall schon behoben und werden unsere OXID Projekte entsprechend damit ausstatten, wenn das Laufzeitproblem dort ebenso markant wird. Hab mich schon genug auf Kosten unseres Kunden damit rumgeschlagen - da schlag ich mich nicht auch noch mit einem OXID Ticket rum, dass mir keiner bezahlt. Wenn ihr nicht blöd aussehen wollt, einfach ignorieren. Unsere Kunden störts nichts :slight_smile: