Ergebnis 1 bis 18 von 18

Thema: Performance Eventlist

  1. #1
    Contao-Nutzer
    Registriert seit
    12.04.2011.
    Ort
    München
    Beiträge
    59

    Standard Performance Eventlist

    Auf einer Seite lasse ich mir ca. 10 Events als Liste ausgeben. Jeder Event hat im Schnitt 8-10 Bilder in einer Galerie (srcset).
    Der Debugmodus zeigt mir ca. !380! Queries.... Kann das sein? Habe ich evtl. einen Fehler gemacht?


    Viele Grüße,
    Florian

  2. #2
    Contao-Nutzer
    Registriert seit
    20.11.2013.
    Beiträge
    202

    Standard

    Es kommt ja noch mehr aus der Datenbank. Das Theme und die Stylesheets und Menü...

  3. #3
    Contao-Nutzer
    Registriert seit
    12.04.2011.
    Ort
    München
    Beiträge
    59

    Standard

    Das ist ja auch normal. Das sind aber nur so ca. 20 - max. 40 je nach Seite.
    Die Eventlist holt jedes mal den kompletten Batzen aus der DB.
    Schön wäre es, wenn man die Felder eingrenzen könnte. In einer Listenansicht brauche ich ja nicht die komplette Galerie... Die will ich in der Vorschau ja nicht anzeigen.

    Grüße,
    Florian
    Geändert von fl0rian (05.05.2015 um 08:13 Uhr)

  4. #4
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    34.114
    Partner-ID
    10107

    Standard

    Das ist leider ein Nachteil der Core Module wie news und calendar. Die laden auch für die Liste alles aus der Datenbank (da du ja prinzipiell alle Daten in jedem Template zur Verfügung hast bzw. haben sollst).

    Hier müsstest du dir etwas eigenes basteln.

  5. #5
    Contao-Nutzer
    Registriert seit
    12.04.2011.
    Ort
    München
    Beiträge
    59

    Standard

    Danke für die Info! Hab ich leider schon vermutet. Für eine „normale” Website sollte es ja kein Problem darstellen.
    Schön wäre es aber, wenn man da in Zukunft etwas nachbessern könnte.
    Programmatisch sollte sich der Aufwand ja einigermassen in Grenzen halten...

    Grüße,
    Florian

  6. #6
    Contao-Yoda Avatar von MacKP
    Registriert seit
    15.06.2009.
    Ort
    Duisburg
    Beiträge
    13.292
    User beschenken
    Wunschliste
    Contao-Projekt unterstützen

    Support Contao

    Standard

    Naja, das ist eben nicht so einfach: Welche Felder sollen denn ausgegeben werden? Das müsste man also selbst bestimmen können
    Dazu müsste dann eine Auswahl her.. das kannst du dir dann ja mal bei MetaModels anschauen. Das ist nicht unbedingt das was der normale Admin in Contao machen möchte vom Aufwand ;-)

    Viele Grüße
    Contao Pool | C-C-A | MetaModels | [Internetseite -> Mediendepot Ruhr]
    [Arbeitet bei -> Paus Design & Medien]
    "I can EXPLAIN it to you, but I can't UNDERSTAND it for you."

  7. #7
    Contao-Nutzer
    Registriert seit
    12.04.2011.
    Ort
    München
    Beiträge
    59

    Standard

    Schön wärs aber schon, wenns die Möglichkeit irgendwann mal im Core gibt

    Viele Grüße,
    Florian

  8. #8
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    34.114
    Partner-ID
    10107

    Standard

    Solche Anforderungen sprengen den Rahmen der Core Module, denke ich.

    Aber ein News/Eventlist Modul zu schreiben, das nur genau das lädt, was du brauchst, ist denke ich relativ schnell geschrieben (solange es nicht sehr flexibel sein muss) und damit wäre das Problem auch relativ schnell umgangen .

    // hm, aber vielleicht wäre das ja doch etwas für den Core. Für die Performance der News/Eventlist reicht es ja oft (wie auch in diesem Fall), wenn einfach der Content nicht mitgeladen wird, sprich man könnte in den Modulen eine Checkbox einbauen (die für die backwards compatibility by default aktiv ist), mit der man steuern kann, ob auch der Content mitgeladen wird oder nicht und je nachdem wird dann dieser Block nicht ausgeführt. Oder man lässt den Inhalt sowieso nur on-demand direkt im Template laden.
    Geändert von Spooky (05.05.2015 um 12:29 Uhr)

  9. #9
    Contao-Nutzer
    Registriert seit
    12.04.2011.
    Ort
    München
    Beiträge
    59

    Daumen hoch

    Sowas in der Art z.B.!

    Viele Grüße,
    Florian

  10. #10
    Wandelndes Contao-Lexikon Avatar von tab
    Registriert seit
    22.10.2013.
    Beiträge
    10.078
    Contao-Projekt unterstützen

    Support Contao

    Standard

    Das finde ich auch eine gute Idee. Nachrichteninhalte können sehr umfangreich sein, da wäre es schon sinnvoll, diese nur zu laden, wenn es ausdrücklich gewünscht ist.

  11. #11
    Contao-Nutzer
    Registriert seit
    12.04.2011.
    Ort
    München
    Beiträge
    59

    Standard

    Ja, vor allem wenn in den Nachrichteninhalten jeweils noch ne größere Galerie ist....

  12. #12
    Contao-Nutzer Avatar von marebe
    Registriert seit
    01.04.2015.
    Ort
    Schwäbisch Gmünd
    Beiträge
    153
    Partner-ID
    10745

    Standard

    find die Idee von Spooky auch gut!
    Feature request?

  13. #13
    Contao-Nutzer Avatar von marebe
    Registriert seit
    01.04.2015.
    Ort
    Schwäbisch Gmünd
    Beiträge
    153
    Partner-ID
    10745

    HTML

    edit: Für Contao < 3.5.4:
    Ich musste jetzt auch gerade in einem Projekt verhindern, dass für die Listenansicht der Events die tl_content ausgelesen wird. Die Ladezeit der Startseite, auf der 10 Events angezeigt werden verringerte sich durch den Eingriff von 12 auf 4 Sekunden, obwohl eigentlich nur Textelemente und Einzelbilder auf den Detailseiten der Events vorhanden sind.

    SgdModuleEventlist.php:
    PHP-Code:
    /**
     * Class SgdModuleEventlist
     * This class was introduced, because Events->addEvent(...) took too long to load all content
     * elements, although those elements are not needed in the event lists
     *
     * it is connected to lists via config.php:
     * $GLOBALS['FE_MOD']['events']['eventlist'] = "SgdModuleEventlist";
     *
     * @package Sgd
     */
    class SgdModuleEventlist extends ModuleEventlist
    {
        
    /**
         * Add an event to the array of active events
         * @param object
         * @param integer
         * @param integer
         * @param string
         * @param integer
         * @param integer
         * @param integer
         */
        
    protected function addEvent($objEvents$intStart$intEnd$strUrl$intBegin$intLimit$intCalendar)
        {
            if(
    $objEvents->source == 'default') {
                
    $objEvents->source 'fake'// 2016-06-14 ME: normally, source is 'default', and this 'fake' prevents addEvent from loading tl_content
            
    }
            
    parent::addEvent($objEvents$intStart$intEnd$strUrl$intBegin$intLimit$intCalendar);
        }

    ich wollte hier mal meine Lösung für Contao 3.4 rein stellen, falls jemand auch sowas braucht.
    Man muss seine Klasse natürlich dem ClassLoader über die autoload.php bekannt machen und in der config.php die Originalklasse zur Handhabung von Eventliste-Modulen ersetzen, was natürlich nur geht, wenn man in seinem Projekt angibt, dass das Veranstaltungsmodul vorher geladen werden soll.

    config.php:
    PHP-Code:
    $GLOBALS['FE_MOD']['events']['eventlist'] = "SgdModuleEventlist"
    autoload.ini:
    PHP-Code:
    requires[] = "calendar" 
    autoload.php:
    PHP-Code:
    /**
    ** Register the classes
    **/
    ClassLoader::addClasses(array
    (
        
    'Sgd\SgdModuleEventlist'=> 'system/modules/sgd/classes/SgdModuleEventlist.php'
    )); 
    Geändert von marebe (15.06.2016 um 07:58 Uhr)

  14. #14
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    34.114
    Partner-ID
    10107

    Standard

    Man muss einfach nur auf Contao 3.5.4 oder besser aktualisieren, dort wird der Inhalt nicht mehr automatisch für jedes Event mit geladen, sondern nur wenn es in einem Template ausgegeben werden muss.

  15. #15
    Contao-Nutzer Avatar von marebe
    Registriert seit
    01.04.2015.
    Ort
    Schwäbisch Gmünd
    Beiträge
    153
    Partner-ID
    10745

    Standard

    ah, gut zu wissen, danke.
    Leider kann der Projekt-Server nur PHP 5.3 und ich muss noch eine Weile auf Contao 3.4 bleiben.
    Wie genau wurde es denn jetzt gelöst?

    edit:
    Wird also immer noch der Content geladen, aber eben nur für die Events, die tatsächlich angezeigt werden (Limit, Pagination, ...), anstatt für alle, die noch nicht vorüber sind, hab ich das richtig verstanden?

    das addEvent in 3.5.12 sieht nämlich immer noch so aus, dass bei source=='default' immer alles geladen wird ($strDetails .= $this->getContentElement()):
    PHP-Code:
    // Display the "read more" button for external/article links
            
    if ($objEvents->source != 'default')
            {
                
    $arrEvent['details'] = true;
                
    $arrEvent['hasDetails'] = true;
            }

            
    // Compile the event text
            
    else
            {
                
    $id $objEvents->id;

                
    $arrEvent['details'] = function () use ($id)
                {
                    
    $strDetails '';
                    
    $objElement = \ContentModel::findPublishedByPidAndTable($id'tl_calendar_events');

                    if (
    $objElement !== null)
                    {
                        while (
    $objElement->next())
                        {
                            
    $strDetails .= $this->getContentElement($objElement->current());
                        }
                    }

                    return 
    $strDetails;
                };

                
    $arrEvent['hasDetails'] = (\ContentModel::countPublishedByPidAndTable($id'tl_calendar_events') > 0);
            } 
    Geändert von marebe (14.06.2016 um 17:18 Uhr)

  16. #16
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    34.114
    Partner-ID
    10107

    Standard

    Also prinzipiell ist es so, dass nun nicht mehr von Haus aus die Content Elemente der News und Events geladen werden. Stattdessen ist nun die Variable "text" bzw. "details" in den News bzw. Event Templates eine Funktion, die dann die Inhaltselemente lädt. Somit werden die Inhalts Elemente immer nur dann geladen, wenn sie tatsächlich irgendwo ausgegeben werden.

  17. #17
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    34.114
    Partner-ID
    10107

    Standard

    Zitat Zitat von marebe Beitrag anzeigen
    das addEvent in 3.5.12 sieht nämlich immer noch so aus, dass bei source=='default' immer alles geladen wird ($strDetails .= $this->getContentElement()):
    Sieh dir den Code nochmal genauer an . Dort wird Details nur mit einer Funktion befüllt. Diese Funktion lädt die Inhaltselemente. Die Inhaltselemente werden also erst geladen, wenn diese Funktion ausgeführt wird. Und das passiert in den Templates, zB mit
    PHP-Code:
    <?= $this->details ?>

  18. #18
    Contao-Nutzer Avatar von marebe
    Registriert seit
    01.04.2015.
    Ort
    Schwäbisch Gmünd
    Beiträge
    153
    Partner-ID
    10745

    Standard

    Du hast natürlich vollkommen recht
    jetzt stopft man schon Funktionen in ein array... Sachen gibt's... da muss man erstmal drauf kommen.

Aktive Benutzer

Aktive Benutzer

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)

Lesezeichen

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •