Technische Aufbau Webapplikation mit Preloader


#1

Hi @ all,

schreibe gerade meine BA und bin mir grad etwas unsicher wie man einen Preloader programmiert.

Also folgendes:
Man kann sich einloggen (schon implementiert mit Spring Security) und bekommt verschiedene Auswertungstabllen (Datensätze > 1000).
In Moment ist via intercept-url die Rolle überprüft, wenn das zu der entsprechende Rolle passt pack ich im die Daten in ne Hasmap und gibt diese via ModelAndView zurück.
In der View iteriere ich über die Daten und erstelle so die Tabelle.


    @RequestMapping(value = "/list", method = RequestMethod.GET)
    public ModelAndView list() throws Exception {
        Map<String, Object> params = new HashMap<String, Object>();
        List<User> users = userService.getUsers();
        params.put("users", users);
        return new ModelAndView("user/list", params);
    }

Ist jetzt ein Beispiel mit den Usern.

Problem: bei manchen Daten dauert es echt lange und der Nutzer könnte denken, die Anwendung reagiert nicht.

Meine Lösung wäre:
Ich erstelle einen Navigationscontroller, der jeweils zu der leeren View navigiert.
Die anderen Controller reagieren auf Post-Request. In den Views besorg ich mir die passenden Daten via Ajax Request und zeige solange der Request andauert den Preloader an.

Mein Problem ist nur: dann habe ich immer mindestens 2 Request (mal von den Stylesheets und js Dateien abgesehen) für eine Seite.

Daher meine Frage: wie erstellt man sowas “professionell” ? Gibt es eine andere Lösung?
Danke für eure Hilfe.


#2

Falls du Spring-Data verwendest, dann bekommst du quasi “gratis” eine Aufteilung deine Datensätze in “Seiten”. Siehe hier. Wenn du ohne Spring-Data unterwegs bist, empfiehlt es sich wahrscheinlich trotzdem eine Aufteilung in Seiten zu machen (dann musst du dir selbst eine passende Abstraktion bauen), damit die zu verarbeitende Datenmasse nicht so groß ist.

Falls die Query einfach nur ineffizient ist, dann wäre es sinnvoll eine asynchrone Anfrage abzusetzen und den Status anzuzeigen.


#3

Hi danke erstmal,
also die Aufteilung in Seiten machen ich in Moment mit jquery Datatable (Client-Side). Das ist zumindest in meiner Testumgebung kein Problem auch mit 2000 Datensätzen ist die Seite in ca 2-3 Sekunden geladen. Gefiltert und Sortiert wird dann auch über das Plugin. Das Problem was ich damit habe, ist dass 2-3 Sekunden gar nichts angezeigt wird. Ich will den Header und Footer und den leeren Bereich anzeigen und während die Datensätze geladen werden halt im leeren Contentbereich den Ajaxloader. Soviel zur Theroie. Praxis ein Request für die Seite, eine Ajaxrequest für den Content? Oder lieber auf Server-Side Pagination?


#4

Definitiv Server-Side Pagination. Das Entlastet
[ul][li]die Datenbank (Locks, Anbindung zur Datenbank)
[/li][li]die CPU / Speicher des Webservers (es müssen weniger Daten weiterverarbeitet werden)
[/li][li]die Leitung zum Client (es werden weniger Daten übertragen)[/ul]
[/li]
Die Datenbank filtert übrigens deutlich effizienter als ein clientseitiges Script, weil sie idealerweise Indizes verwenden kann. Außerdem bleibt die Anwendung auch für JS-lose Clients noch nutzbar (vllt. nicht mehr so hübsch, aber nutzbar).

Zusätzlich kannst du dann noch eine asynchrone Anfrage machen, damit sich das Antwortverhalten verbessert.


#5

Danke dann werde ich es genau so machen :slight_smile: danke für deine Hilfe


#6

An der Lösung mit der Exception Testking 70-511 exam gefällt mir allerdings nicht, dass dadurch für jede Klasse eine Exception nach dem Schema NotFoundException hinzukommt.


#7

hallo Leute, ich bin noch ein anfänger… hab ein problem mit dem preloader.
hab den preloader schon geschrieben. mit folgenden methoden: start() , handleStateChangeNotification() und handleProgressNotification()
aber wie verknüpfe ich das ganze jetzt mit der Hauptapplikation ? ich kriegs nicht hin :confused:


#8

du hast doch jetzt ein eigenes Thema (schon aus einem anderen Thread abgespalten…),
lass den Quatsch es überall zu posten