Hallo zusammen,
für eine multinationale / mehrsprachige Website wurde eine Erweiterung von uns geschrieben, die Produkte in verschiedenen Sprachen anzeigt. Die Produkte werden als Objekte in Sys-Foldern angelegt, es existiert keine eigenen List/Detail Seiten für die Views, das handelt alles die Erweiterung selbst.
So weit so gut, die Erweiterung funktioniert, funktional erfüllt sie alle Wünsche.
Allerdings: die Performance ist mehr schlecht als recht.
Insgesamt dauert das generieren einer Produktansicht bis zu 10 Sekunden - Messungen haben gezeigt, dass allein das Generieren eines Menübaums für die Produkte in gewählter Sprache über 3 Sekunden benötigt, da ist das parsen in den View noch nicht eingerechnet.
Meine Frage: greife ich falsch auf die Repositories zu und verlangsame das künstlich? Oder liegt das tiefer in extbase vergraben und ich kann an der Stelle kaum beschleunigen?
Für jede Hilfe bin ich dankbar.
Hier der Code, der so zeitintensiv ist - ich kann auch gern die komplette Extension zur Verfügung stellen, wenn es hilfreich ist.
public function build() { $this->setSettings(); $categoryAndProductTree = $this->categoryForProductRepository->findRootCategories(); foreach ($categoryAndProductTree as $categoryFirstLevel) { // first level $allProductsFirstLevel = $this->productRepository->findByCategory($categoryFirstLevel, $this->settings['country']); foreach ($allProductsFirstLevel as $productFirstLevel) { if ($productFirstLevel->getShowInMenu()) { $productsFirstLevel[] = $productFirstLevel; } } $categoryFirstLevel->setProducts($productsFirstLevel); // second level $categoriesSecondLevel = $this->categoryForProductRepository->findChildren($categoryFirstLevel); $categoryFirstLevel->setChildren($categoriesSecondLevel); foreach ($categoriesSecondLevel as $categorySecondLevel) { //\TYPO3\CMS\Core\Utility\DebugUtility::debug($categorySecondLevel->getTitle(), 'title'); $allProductsSecondLevel = $this->productRepository->findByCategory($categorySecondLevel, $this->settings['country']); foreach ($allProductsSecondLevel as $productSecondLevel) { if ($productSecondLevel->getShowInMenu()) { $productsSecondLevel[] = $productSecondLevel; } } $categorySecondLevel->setProducts($productsSecondLevel); // third level $categoriesThirdLevel = $this->categoryForProductRepository->findChildren($categorySecondLevel); $categorySecondLevel->setChildren($categoriesThirdLevel); } } return $categoryAndProductTree; }