Ergebnis 1 bis 4 von 4

Thema: Ladezeit bei options_callback

  1. #1
    Contao-Fan
    Registriert seit
    16.11.2012.
    Ort
    Freiburg
    Beiträge
    539

    Standard Ladezeit bei options_callback

    Hallo zusammen,

    folgendes Problem. Ich habe in der Tabelle tl_member über 30k Datensätze.
    Jetzt habe ich z.B. in der Tabelle tl_content mir ein Feld hinzugefügt das per Select die Werte der Tabelle tl_member mir ausgibt.

    Ladezeit ca. 1.26s
    PHP-Code:
    $GLOBALS['TL_DCA']['tl_content']['fields']['test_alex'] = [
        
    'exclude'    => true,
        
    'inputType'  => 'select',
        
    'search'     => true,
        
    'filter'     => true,
        
    'sorting'    => true,
        
    'flag'       => 11,
        
    'foreignKey' => 'tl_member.id',
        
    'eval'       => [
            
    'chosen'   => true,
            
    'tl_class' => 'w50',
        ],
        
    'sql'        => [
            
    'type'    => 'integer',
            
    'default' => 0,
        ],
        
    'relation'   => [
            
    'type' => 'hasOne',
            
    'load' => 'eager',
        ],
    ]; 
    Ladezeit ca. 1.29s
    PHP-Code:
    $GLOBALS['TL_DCA']['tl_content']['fields']['test_alex'] = [
        
    'exclude'    => true,
        
    'inputType'  => 'select',
        
    'foreignKey' => 'tl_member.CONCAT(lastname, \' \', firstname, \' \', email)',
        
    'eval'       => [
            
    'chosen'   => true,
            
    'tl_class' => 'w50',
        ],
        
    'sql'        => [
            
    'type'    => 'integer',
            
    'default' => 0,
        ],
        
    'relation'   => [
            
    'type' => 'hasOne',
            
    'load' => 'eager',
        ],
    ]; 
    Ladezeit ca. 15.27s
    PHP-Code:
    $GLOBALS['TL_DCA']['tl_content']['fields']['test_alex'] = [
        
    'exclude'    => true,
        
    'inputType'  => 'select',
        
    'options_callback' => ['tl_content_alex''getUsers'],
        
    'eval'       => [
            
    'chosen'   => true,
            
    'tl_class' => 'w50',
        ],
        
    'sql'        => [
            
    'type'    => 'integer',
            
    'default' => 0,
        ],
    ];

    class 
    tl_content_alex extends \Contao\Backend
    {
        public function 
    getUsers()
        {
            
    $choices = [];

            
    $objMembers = \Contao\MemberModel::findAll();

            if (
    null === $objMembers) {
                return 
    $choices;
            }

            while (
    $objMembers->next()) {
                
    $choices[$objMembers->id] = $objMembers->firstname.' '.$objMembers->lastname.' '.$objMembers->email;
            }

            return 
    $choices;
        }

    Ladezeit ca. 3.23s
    PHP-Code:
    $GLOBALS['TL_DCA']['tl_content']['fields']['test_alex'] = [
        
    'exclude'    => true,
        
    'inputType'  => 'select',
        
    'foreignKey' => 'tl_member.id',
        
    'eval'       => [
            
    'chosen'   => true,
            
    'tl_class' => 'w50',
        ],
        
    'sql'        => [
            
    'type'    => 'integer',
            
    'default' => 0,
        ],
        
    'relation'   => [
            
    'type' => 'hasOne',
            
    'load' => 'lazy',
        ],
    ]; 
    Ladezeit ca. 3.85s
    PHP-Code:
    $GLOBALS['TL_DCA']['tl_content']['fields']['test_alex'] = [
        
    'exclude'    => true,
        
    'inputType'  => 'select',
        
    'foreignKey' => 'tl_member.CONCAT(lastname, \' \', firstname, \' \', email)',
        
    'eval'       => [
            
    'chosen'   => true,
            
    'tl_class' => 'w50',
        ],
        
    'sql'        => [
            
    'type'    => 'integer',
            
    'default' => 0,
        ],
        
    'relation'   => [
            
    'type' => 'hasOne',
            
    'load' => 'lazy',
        ],
    ]; 
    Wie bekomme ich mit einem options_callback die Ladezeit auch so niedrig?
    Grüße
    Alex

  2. #2
    Contao-Nutzer Avatar von eki89
    Registriert seit
    20.04.2016.
    Beiträge
    41
    Partner-ID
    11715
    Contao-Projekt unterstützen

    Support Contao

    Standard

    Hey Alex,

    der Callback an sich verursacht keine Verzögerung. Allerdings nutzt du das MemberModel, wodurch du zwangsläufig alle Datenbankfelder abfragst (SELECT * FROM...).

    Hier ist die Stelle, die für die Optionen des Select-Widgets verantwortlich ist. Wenn du das auch so machst, solltest du ziemlich genau bei dem Delay landen, den du auch schon über den foreignKey erreichst.

  3. #3
    Contao-Urgestein Avatar von Toflar
    Registriert seit
    15.06.2009.
    Beiträge
    4.467
    Partner-ID
    8667
    User beschenken
    Wunschliste

    Standard

    Bei 30k Datensätzen wird das normale Dropdown aber ziemlich sicher auch aussteigen, nicht? Also so etwas ist doch nicht bedienbar.
    Ich würde dir unseren tableLookupWizard dafür empfehlen. Der ist genau dafür gebaut: https://github.com/terminal42/contao-tablelookupwizard
    Contao Core-Entwickler @terminal42 gmbh
    Wir sind Contao Premium-Partner!
    Für Individuallösungen kannst du uns gerne kontaktieren.
    PS: Heute schon getrakked?

  4. #4
    Contao-Fan
    Registriert seit
    16.11.2012.
    Ort
    Freiburg
    Beiträge
    539

    Standard

    Zitat Zitat von Toflar Beitrag anzeigen
    Bei 30k Datensätzen wird das normale Dropdown aber ziemlich sicher auch aussteigen, nicht? Also so etwas ist doch nicht bedienbar.
    Ich würde dir unseren tableLookupWizard dafür empfehlen. Der ist genau dafür gebaut: https://github.com/terminal42/contao-tablelookupwizard
    genau sowas habe ich gebraucht. Vielen Dank
    Grüße
    Alex

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
  •