rowe42 / lhm_animad_admin_html5

0 stars 6 forks source link

Zu viele Requests beim Aufruf einer Seite #203

Closed rowe42 closed 6 years ago

rowe42 commented 6 years ago

Die Navigation innerhalb einer View (z.B. keepers-view) wird über iron-pages realisiert. Dabei sind innerhalb von iron-pages alle ansteuerbaren Elemente vorhanden, aber nur eines wird angezeigt:

          <iron-pages selected="[[page]]" attr-for-selected="name" fallback-selection="view404" route="{{subroute}}">
              <animad-keepers-list name=""
                url="[[backendUrl]]/api/admin_service/keepers"
                default-search='vorname:hans'
                route="{{subroute}}"
                edit-path="/keepers-view/edit"
                create-path="/keepers-view/create"
                on-filter-data="_filterData"
                filtered-data="[[_filteredData]]"
                resources="[[resources]]" lang="[[lang]]">
              </animad-keepers-list>
              <animad-keeper-create-form name="create"
                save-url="[[backendUrl]]/api/admin_service/keepers"
                profile-url="[[backendUrl]]/api/admin_service/profile/keepers"
                save-path="/keepers-view/"
                cancel-path="/keepers-view/"
                resources="[[resources]]" lang="[[lang]]">
              </animad-keeper-create-form>
              <animad-keeper-update-form name="edit" load-url="{{_loadSingleKeeperUrl}}"
                 profile-url="[[backendUrl]]/api/admin_service/profile/keepers"
                 save-path="/keepers-view/"
                 cancel-path="/keepers-view/"
                  resources="[[resources]]" lang="[[lang]]">
              </animad-keeper-update-form>
          </iron-pages>

Das Problem ist aber, dass alle Elemente beim ersten Laden der Seite bereits unsichtbar gerendert und initialisiert werden. Dabei werden diverse Calls Richtung Backend losgeschickt, z.B. um die Inhalte der Dropdowns zu laden. Wenn der Nutzer aber z.B. nur bestehende Einträge in der Liste ansehen will, hätte es viele der Requests nie gebraucht.

Ich habe bereits versucht, die nicht aktiven Elemente zusätzlich über <template is="dom-if"... zu kapseln. Das funktioniert aber nicht.

Die einzige Lösung die mir einfällt ist, hier analog zum Vorgehen in animad-app lazy-loading zu verwenden. Ich habe das mal bei den keepers beispielhaft realisiert. Bei den Animals und Enclosures müsste es noch nachgezogen werden. Dazu sollte der gemeinsame Code allerdings in eine Behavior ausgelagert werden.

@xdoo @dragonfly28 @ejcsid @Baumfrosch

rowe42 commented 6 years ago

Habe jetzt aus den 3 Views die generischen Anteile rausgezogen (@ejcsid aber nicht die filterData-Sachen, da nehme ich an, dass die in der View sein sollen) in eine neue Behavior. Außerdem / dadurch habe ich die Komponenten in den Views (liste, update, create) auf lazy-loading umgestellt - dann kommen die entsprechenden Requests erst, wenn man die entsprechende Komponente aufruft.

Habe das alles in Branch #202 eingecheckt (den hatte ich vorhin für ein anderes Issue erstellt). Mache den PR dann aber erst nächste Woche, weil ich vorher noch einen PR für Branch #197 erstellen will.

Möchte aber noch eine Frage zu Diskussion stellen: Ich würde gerne die Beispiel-Komponenten auf den einzelnen Views rausschmeissen und nur die jeweils 3 zusammenhängenden Komponenten liste, create und update übrig lassen (wie bei den Keepers). Der Rest war mal sinnvoll, wie wir noch einen Showcase-Charakter gegen die Mocks hatten, aber jetzt gegen das echte Backend macht das Zeug eh nur noch wenig Sinn - außerdem habe ich mir nicht die Arbeit gemacht, darin auch alles zu fixen. Seid ihr einverstanden? Habe alles, was ich meine, in dem Branch auskommentiert. Würde es aber noch physisch löschen wollen, wenn ich euer OK kriege.

rowe42 commented 6 years ago

Jetzt in master. Schließe das Issue. Werde auch die Beispiele im nächsten Zug entfernen, wenn ich nicht noch Einspruch erhalte.