[Frage] Class Mapper Performance vs Cache

  • Coderbear Coderbear
    Typ im Roten Hemd
    0 x
    2 Beiträge
    0 Hilfreiche Beiträge
    21. 01. 2019, 16:09

    Guten Tag liebe Community,
    ich habe im Rahmen eines Projekts ein Produkt-Management System in Form einer Extension entwickelt. Leider komme ich mit den Live-Daten an Performance-Grenzen. Das Class-Mapping dauert zu lang, da viele Informationen übertragen werden. Der Datenbestand besteht aus ~5000 Artikel und ~250 Artikelgruppen, welche über logische Relationen miteinander verbunden wurden. Zudem werden die Inhalte in Englisch übersetzt.

    Jeder Artikel und jede Gruppe haben übersetzbare und vererbbare Texte und FileReference-Listen für die Darstellung. Die Relationen innerhalb der Gruppen wurden per m:n Zuordnung gelöst.
    Wenn ich nun hergehe und auf meinem Repository ein Query absetze und die Ausgabe ins View gebe, verzögert sich der Seitenaufruf bei 500 ermittelten Datensätzen auf > 30 sek pro Seite. Suchfunktion + Aufbereitung der Ergebnisse dauerten einfach zu lang. Auch die Detail-View der Artikelgruppe, welche die nächsten 2 Ebenen der Gruppenstruktur sowie Artikel-Vorschauelemente rendert, hat sehr lange Ladezeiten aufgrund der Komplexität.

    Meine Theorie war, dass der ClassMapper im Vergleich zum puren SQL-Result langsamer ist und deswegen ersetzt werden müsste. Aber mit einem Raw-Query kommt man auch nicht allzu weit, da in den Ergebnissen die Relationen fehlten und nur aufwendig ausgelesen werden konnten.

    Also bin ich hergegangen und habe mich mit dem Caching-Framework auseinander gesetzt, habe Abbilder mit vorgenerierten hashes in serialisierte Arrays geschrieben und im Cache unter der ModelUid abgelegt.
    Dies brachte die gewünschte Performance, brachte jedoch Seiteneffekte bei der Übersetzung mit sich. Typo3 übersetzte natürlich automatisch und ich erhielt gemischten Inhalt (manche Artikelgruppen in Deutsch, manche in Englisch). Der Grund dafür war der Language-Context und das resultierende Overlay während des Cachevorgangs. Das ermittelte Model war bereits übersetzt.

    Im dritten Schritt wollte ich übersetzbare Felder extra behandeln und im Cache die Werte der Translations im Cache-Array speichern. Die Ermittlung der Translations via BackendUtility geben leider nur reine SQL Rows zurück. Wieder das Problem mit Relationen.

    Je mehr ich über meine nächsten Schritte nachdenke desto mehr entferne ich mich vom Typo3 Standard, was sicher nicht im Sinne des Erfinders war.

    Hat jemand schonmal Erfahrungen in diesem Bereich gesammelt?
    Ich komme so nicht weiter...
    MfG
    Coderbear


  • 1
  • 1