# Performance Beispiel-Plugin

**URL:** https://forum.shopware.com/t/performance-beispiel-plugin/14461
**Category:** Shopware 3.5
**Tags:** programming
**Created:** [17. Juli 2013 um 17:11 UTC](https://forum.shopware.com/t/performance-beispiel-plugin/14461 "2013-07-17T17:11:47Z")
**Posts on this page:** 5
**Page:** 1

<div class="post-metadata">

### Author: ![mmmichael](https://avatars.discourse-cdn.com/v4/letter/m/ac91a4/32.png) [@mmmichael](https://forum.shopware.com/u/mmmichael)
#### Post date: [17. Juli 2013 um 17:11 UTC](https://forum.shopware.com/t/performance-beispiel-plugin/14461/1 "2013-07-17T17:11:47Z")

</div>

Hallo, das Plugin unter [http://wiki.shopware.de/Fortgeschritten … \_1028.html](http://wiki.shopware.de/Fortgeschrittene-Artikellisting-mit-Variantenwechsel%5C_detail%5C_1028.html) holt sich ja die Daten aus dem View und reichert diese in einer Foreach Schleife an. Ist sowas nicht super infperformant, weil 16x ein Query abgefeuert wird? Hätte man nicht besser einmal die Daten holen können um diese dann zu verteilen? Gruß, Michael ` public function onFrontendPostDispatch(Enlight\_Event\_EventArgs $arguments) { /\*\*@var $controller Shopware\_Controllers\_Frontend\_Index \*/ $controller = $arguments-\>getSubject(); $view = $controller-\>View(); $request = $controller-\>Request(); if ($request-\>getControllerName() !== 'listing' || $request-\>getModuleName() !== 'frontend' || !$view-\>hasTemplate()) { return; } $articles = $view-\>getAssign('sArticles'); foreach($articles as &$article) { if (!$article['sConfigurator']) { continue; } $article['swagVariantsInListing'] = $this-\>getArticleConfiguration($article['articleID']); } //Add our plugin template directory $view-\>addTemplateDir($this-\>Path() . 'Views/'); $view-\>extendsTemplate('frontend/listing/extension.tpl'); $view-\>assign('sArticles', $articles); }`

---

<div class="post-metadata">

### Author: ![kotoradeluxe](https://avatars.discourse-cdn.com/v4/letter/k/47e85d/32.png) [@kotoradeluxe](https://forum.shopware.com/u/kotoradeluxe)
#### Post date: [18. Juli 2013 um 10:18 UTC](https://forum.shopware.com/t/performance-beispiel-plugin/14461/2 "2013-07-18T10:18:37Z")

</div>

wie soll das funktionieren? 1mal die Daten holen. über das ORM wird das nicht klappen - über SQL könnte man so etwas machen wie ` SELECT \* FROM s\_articles WHERE id IN (44,55,77,99) ` dann hätte man in dem Fall 4 aber ohne Relations ohne Langtexte, Bilder, etc… Wenn ich also Nutzen und Performance aufwiege ist die Vorgehensweise seitens Shopware besser

---

<div class="post-metadata">

### Author: ![mmmichael](https://avatars.discourse-cdn.com/v4/letter/m/ac91a4/32.png) [@mmmichael](https://forum.shopware.com/u/mmmichael)
#### Post date: [18. Juli 2013 um 10:23 UTC](https://forum.shopware.com/t/performance-beispiel-plugin/14461/3 "2013-07-18T10:23:38Z")

</div>

Hallo, genau das hatte ich vermutet. Ich würde dann aber so vorgehen, dass ich mir alle ArtikelIDs hole und im Nachgang via “id IN ()” mir für ALLE Artikel in einem Schlag die Daten hole und die sArticle aus dem View anreichere. Derzeit ist es ja auch so, dass im foreach() auch einzeln die Bilder/Preise usw. geholt werden, was ja doch eine ganze Menge an Querys erzeugt. Das ist natürlich alles die Schattenseite der Kapselung/Abstraktion von Funktionalität Gruß, Michael

---

<div class="post-metadata">

### Author: ![kotoradeluxe](https://avatars.discourse-cdn.com/v4/letter/k/47e85d/32.png) [@kotoradeluxe](https://forum.shopware.com/u/kotoradeluxe)
#### Post date: [18. Juli 2013 um 10:37 UTC](https://forum.shopware.com/t/performance-beispiel-plugin/14461/4 "2013-07-18T10:37:38Z")

</div>

naja du könntest zwar per SQL IN() direkt mehrere Daten holen bräuchtest aber trotzdem mehr als eine SQL Anweisung. (s\_articles, s\_articles\_detail, s\_articles\_configuration\_\*) da würde ich lieber das Caching aktivieren HTTP-Front-Cache und APC - dann wird es eh nicht mehr aus der Datenbank geholt

---

<div class="post-metadata">

### Author: ![Oliver\_Skroblin](https://avatars.discourse-cdn.com/v4/letter/o/6bbea6/32.png) [@Oliver\_Skroblin](https://forum.shopware.com/u/Oliver_Skroblin)
#### Post date: [19. Juli 2013 um 14:00 UTC](https://forum.shopware.com/t/performance-beispiel-plugin/14461/5 "2013-07-19T14:00:37Z")

</div>

Hi, hier gibt es verschiedene Meinungen, Erfahrungen. Oftmals ist es meiner Erfahrung nach sogar schneller wenn man lieber 5-6 einzelne Queries macht die sauber über Primary und Foreign Keys laufen als wenn man alle Daten in einem riesigen Statement holt. Gutes Beispiel sind Sortierungen. Wenn du die Artikel Daten von 30x Artikeln selektierst + alle zusätzlichen Daten, wird das Resultset das SQL filtern und sortieren muss natürlich immer größer und größer. Und je größer die Menge an Daten ist, die SQL sortieren muss, desto länger dauert die Query, desto mehr nachfolgende Queries laufen in die Warteschleife. Das gleiche ist bei Doctrine. Damit Doctrine die Daten als verschachteltes Array zurück liefert, iteriert Doctrine die Daten. Je mehr Assoziationen du verknüpfst desto länger brauch Doctrine um die Daten aufzubereiten. Gruß Oliver
