Avatar billede kenneth_breve Nybegynder
12. juni 2008 - 14:46 Der er 13 kommentarer

JfreeChart er langsom?

Jeg har lavet en applet som ved hjælp af JfreeChart kan vise nogle grafer.

Første gang jeg besøger siden hvor appleten ligger på så tager det meget lang tid at generere grafen (ca. 1-2min og grafen består af ca. 20punkter).
Herefter går det hurtigere. Jeg har fundet ud af at det er fordi at første gang siden besøges så er der en masse klasser fra jfreechart som skal downloades.
Men det ville nu være rart hvis de blev downloadet når man kommer til siden, så der istedet var en startup tid.

Min applet er lagt således ind på hjemmesiden:

<APPLET codebase="classes" code="NewApplet.class" archive="JavaLibrary2.jar"  width=950 height=680></APPLET>


Udover JavaLibrary2.jar liger der også et par andre jar filer herunder jfreechart.jar


Kort sagt hvordan kan jeg få min applet til at loade de nødvendige filer fra jfreechart.jar så snart jeg loader appleten, istedet for først at gøre det når grafen laves?
Avatar billede arne_v Ekspert
12. juni 2008 - 15:01 #1
Start en traad i init som bruger nogle klasser fra de 2 jar filer.
Avatar billede kenneth_breve Nybegynder
12. juni 2008 - 15:07 #2
Har du et eksempel på dette arne?

Det er jo ikke samtlige klasser fra jfreechart.jar som skal bruges. Det er kun omkring 100 klasser.
Hvordan kan jeg loade netop disse klasser i starten?
Avatar billede arne_v Ekspert
12. juni 2008 - 15:21 #3
Proev og start med at loade en klasse fra hver.

Den burde saa cache jar filen for resten.
Avatar billede kenneth_breve Nybegynder
12. juni 2008 - 15:43 #4
Tak for svaret Arne

Jeg tilføjede denne linje:

org.jfree.data.xy.XYSeriesCollection justToLoadClass = new org.jfree.data.xy.XYSeriesCollection();

Dette medførte at ca. 10 klasser blev indlæst ved opstarten fra jfreechart.jar

Men eftersom der stadig er mange flere klasser der bruges mangler der stadig at blive loadet ca. 100 klasser fra jfreechart.jar

Har du nogen ide til hvordan jeg får indlæst resten?
Avatar billede kenneth_breve Nybegynder
15. juni 2008 - 21:34 #5
Er jeg nød til at indlæse resten af klasserne på samme måde?

Altså ved at oprette nogle "dummy" objekter i init() metoden som altså tvinger alle de nødvendige klasser i jfreechart til at blive loaded ved opstarten
Avatar billede arne_v Ekspert
15. juni 2008 - 23:54 #6
Mystisk, fordi normalt bør browser hente jar filen en gang og så hente class filer fra
den cachede version hver gang derefter.

Så en klasse fra den ene jar fil og en klasse fra den anden jar fil burde være nok.

Som altid er der forskellige browser versioner, forskellige Java version, forskellige
styre systemer etc. som kan have en effekt.

Hvordan har du konstateret at den henter jar filen flere gange ?
Avatar billede arne_v Ekspert
15. juni 2008 - 23:54 #7
Avatar billede kenneth_breve Nybegynder
16. juni 2008 - 16:16 #8
Du har misforstået mig lidt Arne.

Den cacher fint klasserne.

Problemet er kun første gang man vil se applet'en. Altså fra en computer som ikke har været på siden før. Så indlæser den kun da klasser som bruges i init() metoden. Men jeg har brug for mange flere klasser senere i appleten. Disse klasser kunne jeg godt tænke mig blive indlæst i starten også, altså i init metoden.

Men spørgsmålet er om jeg er nød til at lave disse dummy objekter:

org.jfree.data.xy.XYSeriesCollection justToLoadClass = new org.jfree.data.xy.XYSeriesCollection(); 

Som altså kun bruges til at hente klasserne der er afhængige af XYSeriesCollection()

Håber jeg har udtrykt mig klarere denne gang :-S ?
Avatar billede arne_v Ekspert
17. juni 2008 - 03:07 #9
Dine klasser er i 2 jar filer ikke ?

Appletten bør kun hente de jar filer en enkelt gang og så hente klasserne ud af den.
Avatar billede kenneth_breve Nybegynder
17. juni 2008 - 16:36 #10
Jo mine klasser er i 2 jar filer.

Men jeg kan se at når jeg generer min graf så står den og henter en masse klasser førend grafen vises. Dette er selvfølgelig nødvendige klasser.

Men jeg kunne godt tænke mig at alle disse klaser blev hentet i init metoden istedet for at det først sker når man generer grafen.

For netop dette program virker det nemlig mere naturligt med en lang startup tid, end at man skal vente midt lang tid midt i programmet (når grafen genereres).
Avatar billede arne_v Ekspert
24. juni 2008 - 04:33 #11
Hvad dækker "kan se" over ?

Når jeg bruger en JFreeChart JApplet, så kan jeg se i min access.log at de 2 jar
filer kun hentes en gang.
Avatar billede kenneth_breve Nybegynder
24. juni 2008 - 19:18 #12
Hej Arne

Jeg kan se det i mit java control panel.

Men jeg tror at årsagen til at den henter klasserne enkeltvis er fordi de også ligger i mappen enkeltvis. Altså udover i jar filen. Så hvis jeg sletter disse klasser vil den nok bare hente jar filen. Og så har man jo netop hentet alle klasser som du siger Arne.

Men kan man lave sine egen modificeret jfreechart jar fil, som netop kun indeholder de klasser der skal bruges fra jfreechart?
Avatar billede arne_v Ekspert
25. juni 2008 - 02:26 #13
Prøv med kun jar og ingen class filer.

Du kan godt udpakke en jar, fjerne nogle class file og pakke en ny jar af
resultatet.

Men spørgsmålet er om det er umagen værd.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester