# Ladezeit Applet verkürzen



## genialica (20. Nov 2004)

*Hallo liebe Community!!*

Wir programmieren gerade an einem komplexen JAVA-Applet mit dieversen Bild-, und Steuerelementen.
Funktioniert jetzt eigentlich schon sehr gut und soll auch noch um einige schöne Funktionen erweitert werden.

*DAS PROBLEM:*
Die Ladezeit betragt bei Aufruf über Web je nach Internetverbindung 10-180 Sekunden!!!!
Das ist eindeutig zu lang.

Wenn wir die locale Netzwerkadresse beim Testen aufrufen wird die Ladezeit <1 Sekunde, auch so wie es sein soll.

Wir haben uns die Aufrufe während des Ladens mal angeschaut und festgestellt, dass alle Elemente komischerweise 2 doppelt geladen werden. 1. Woran könnte das liegen?

2. Welche allgemeine Möglichkeiten und Grundsätze sollte man beim "bauen" eines Applets verwenden, um die Ladezeit auch bei schlechter Internetverbindug möglichst kurz und optimal zu halten. Gibt es da ein paar Tricks, wie man auch aufwendigere Applets schnell zur Anzeige bekommt? Wenn das Applet nämlich nach dem ersten "langem" Aufruf erfolgreich im Browser-Cache ist, dauern die später nachfolgenden Aufrufe auch nur <1 Sek., solange man nicht ein anderes Browserfenster öffnet.!!!!! 

Die Klassen befinden sich auf einem externen Server.
Das Auslagern der Klassen auf unseren eigenen Server können wir nicht so einfach machen, weil die Bilder, die angezeigt werden sollen auf dem Applet von dem externen Server stammen.

Wäre toll, wenn sich hier eine Disskussion entwicklet wie man bei aufwendigeren Applets die Ladezeiten optimiert.

Wir freuen uns auf alle Vorschläge und Ideen

admin@genialica.de


----------



## L-ectron-X (21. Nov 2004)

Um Ladezeit zu sparen, bzw. ein Applet schneller über das Internet zu befördern kann man die Klassen in ein jar-File packen. Dadurch verringert sich Übertragungsvolumen und die Klassen stehen damit schneller zur Verfügung.
Am einfachsten kann man die Klassen mit einem Packprogramm im Zip-Format speichern und danach die Dateiextension in .jar umbenennen.


----------



## Bleiglanz (21. Nov 2004)

gibts da nicht in der 5er Version pack200 oder sowas? IMHO ist es  nicht immer optimal, gleich ALLES in ein riesiges Jar zu packen;

Es geht doch auch irgendwie, nur ein minimales Start.class fürs Applet zu verwenden und dann werden alle weiteren Klassen "on demand" vom Classloader automatisch vom Server abgeholt?!



> Das Auslagern der Klassen auf unseren eigenen Server können wir nicht so einfach machen, weil die Bilder, die angezeigt werden sollen auf dem Applet von dem externen Server stammen.


stecken die Bilder mit im Jar? oder werden die extra über HTTP abgeholt (url)???

Vielleicht solltest du mal drüber nachdenken, wieviel Daten ein Modem mit 56k maximal innerhalb 1 Sekunde downloaden kann ["so wie es sein soll"] - gegen die Physik kannst du nichts ausrichten


----------



## genialica (21. Nov 2004)

Hallo und danke für die Beiträge!

Die Klassen haben wir schon zu einem JAR-File komprimiert. 
Trotzdem hat sich die Ladezeit dadurch nicht verbessert.



			
				Bleiglanz hat gesagt.:
			
		

> Vielleicht solltest du mal drüber nachdenken, wieviel Daten ein Modem mit 56k maximal innerhalb 1 Sekunde downloaden kann ["so wie es sein soll"] - gegen die Physik kannst du nichts ausrichten



Die Grafikelemente und JAR-File sind garnicht so groß. 
Selbst bei 56k sollte alles in 1-2 Sek. geladen sein.

Allerdings dauert es trotzdem über 10-180 Sek..

Die Elemente werden anscheinend 2 mal geladen. Ich weiß nicht warum.
Was mache ich falsch beim Laden, und wie machen wir das mit dem Classloader denn genau?

Die Bilder werden über HTTP von einem anderen Server geladen (z.B. http://80.122.234.177/web-content/picture.jpg)

Danke im Vorraus für Eure Antworten.
genialica[/quote]


----------



## DesertFox (21. Nov 2004)

Mhh bei mir wird kein Bild angezeigt (auch wenn ich hinten die Klammer entfern). Kann es sein, dass es in diesem Beispiel an dem Server und nicht an Java liegt?


----------



## Bleiglanz (21. Nov 2004)

a) genaues Profiling: was dauert den so lange

das Laden?
das Starten?
der Bildschirmaufbau?

b) Welche Elemente werden 2 mal geladen?

c) Welcher Webserver? richtiger Content-Type? last-modiefied-header richtig gesetzt?

d) 180 Sek ist doch ein Witz??? Mach mal System.out.print im init() des Appelts und öffne dann die Java-Console des Browsers, damit du mitbekommst, was überhaupt los ist ...


----------



## genialica (21. Nov 2004)

@DesertFox: Die Bildadresse war nur ein Beispiel mit irgendeiner IP.

@ Bleiglanz: Danke für die Beiträge!!

a) bis das Applet vollstäbdig geladen und dann angezeigt wird.

das Laden? 
das Starten? 
der Bildschirmaufbau? 

würde eher sagen dass Laden, weil danach alles Blitzschnell geht.

b) Es werden ALLE Elemente 2 mal geladen und wir wissen nicht genau warum ;-((

c) Lokaler Webserver (VB6- EXE), 
glaube aber Content-Type ist ok, muss da noch mal meinen Parner fragen, der das gemacht hat.

d) Werde das auch an meinen Partner weitergeben, aber ich glaube, das hat der schon gemacht ;-))

Frage: Was könnten wir denn falsch gemacht haben, dass das Applet fälschlicherweise 2 mal geladen wird???

PS.: Danke an die Forummitglieder hier für die Tips und Ratschläge!!
Weiter so!!


----------



## L-ectron-X (22. Nov 2004)

Ohne einen Blick auf den Code zu werfen, wird's nun glaube ich schwierig.


----------



## stev.glasow (22. Nov 2004)

Im allgemeinen dauert das starten der vm doch am längsten, (natürlich gibt's ausnahmen, aber meist ist es doch so !?!) Ist das vieleicht das Probelem :: geht alles nach erneutem Laden ruck zuck ? Und wieviel Kb hat denn alles zu sammen?
Lade mal das Appletm leere den Browsercache und lade das Applet noch mal ohne den Browser neu zu starten, so dass die Daten noch mal runtergeladen werden müssen die vm aber startbereit bleibt


----------



## Bleiglanz (22. Nov 2004)

> c) Lokaler Webserver (VB6- EXE),


Hä? Was soll das sein? Warum nicht den IIS nehmen, ist doch bei jeder WindowxXP Professional mit dabei?

Einen guten Webserver zu programmieren ist hochgradig nichttrivial, z.B. weil bei Applets und Bildern eine keep-alive TCP Verbindung verwendet werden soll - kann das euer VB6-EXE Webserver?



> b) Es werden ALLE Elemente 2 mal geladen und wir wissen nicht genau warum ;-((


schmeiss halt endlich mal Etherreal an und schaut was passiert. Normalerweise schickt der Browser vor jedem Request erstmal eine hasModified anfrage, vielleicht ist das schon was kapput

zeig mal den code fürs Applet her, zumindest dafür sollte doch nur ein einziger Request abgesetzt werden...


----------

