Antwort
 
Themen-Optionen Thema durchsuchen
Alt 18.03.2007, 12:27 Nach oben    #1
Martin Breuer
 
Benutzerbild von WarrenFaith
 
Registriert seit: 17.08.2005
Ort: Berlin
Beiträge: 1.653
Standard Machbarkeit / Performancefrage

Aloah,

ich muss ein paar Statistiken ausgeben als Balkendiagramme. Es wird Jahresstatistiken geben (ein Balken pro Monat), Monatsstatistik (ein Balken pro Tag) und Tagesstatistik (ein Balken pro Stunde).

Ich hab folgende Techniken zur Verfügung:
JavaScript, Taglibs/JSP

Die Taglibs/JSP werden mir 2 Datentypen liefern. Einmal die Zeit/Zeitraum einmal die Menge.

Kleiner Hinweis noch: Die Menge kann von Null bis in die mehrere Tausend gehen.

Dafür wollte ich nun in JS die Daten sammeln, die größte Anzahl rausfischen und das als 100% nehmen und die anderen danach skalieren.
Ich hab nun 2 Probleme bei denen ich nicht weiß ob sie sauber bzw performant sind.

Zum einen brauch ich ne Schnittstelle um die Daten für JS zugänglich zu machen und zum anderen soll nicht erst vor dem Auge des Betrachters die Statistik "bauen".

Für die Schnittstelle dachte ich, dass ich die einzelnen Balken (sind in Tabellenform - ein Balken eine Zeile) erstmal gar nicht darstelle und in nem versteckten div die Menge eintrage, dann mit JS das auslese, die 100% erfasse und dann die länge des Balken berechne und die Länge dann einem <img> als width übergebe.

Nun ist die Frage, ob das halbwegs performant ist/wäre.

Ich bin in JS nicht so dolle, deswegen wollte ich mal nach euren Meinungen fragen.
__________________
I did it my way - Senseless-Blog
Weihnachtsgeschenk? Schülern helfen - Bodypainting Kalender für 2009
WarrenFaith ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 18.03.2007, 14:40 Nach oben    #2
Johannes Müller
 
Benutzerbild von $traight-$hoota
 
Registriert seit: 15.09.2005
Ort: Königreich Flieden
Beiträge: 551
Standard

also du lieferst die werte direkt im html-code der seite?? für was brauchst du dann javascript? das kannst du dann doch eigentlich auch serverseitig berechnen lassen...

ansonsten solltest du die informationen möglichst so übertragen, dass user ohne javascript oder css das diagramm oder zumindest dessen werte auch verstehen können.
Von daher würde ich die daten z. B. so in einer Tabelle ausgeben:
HTML-Code:
<table id="Diagram">
<tbody>
<tr>
<th>Januar</th>
<td>223 Einträge</td>
</tr>
<tr>
<th>Januar</th>
<td>8674 Einträge</td>
</tr>
<!-- etc. -->
</tbody>
</table> 
das javascript sollte dann grob folgendes machen:
javascript Code:
  1. var table = document.getElementById("Diagram");
  2.  
  3. /* Damit wird die tabelle während der berechnungsphase nicht angezeigt.
  4. Zusätzlich könnte noch eine Ladeanzeige eingefügt werden. */
  5. table.style.visibility = "hidden";
  6.  
  7. values = collectDiagramValues(table);
  8.  
  9. /* Müsste vllt. noch implementiert werden... *gg* */
  10. max = Math.max(values);
  11.  
  12. for(i in values){
  13. table.firstChild.childNodes&#91;i&#93;.latChild.innerHTML = '<img width="' + getDiagramLength(values&#91;i&#93;, max) . '" />';
  14. }
  15.  
  16. table.style.visibility = "visible";
__________________
Weißt Bescheid - Scheiß wie weit
$traight-$hoota ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 18.03.2007, 14:48 Nach oben    #3
Martin Breuer
 
Benutzerbild von WarrenFaith
 
Registriert seit: 17.08.2005
Ort: Berlin
Beiträge: 1.653
Standard

Das Problem ist, dass ich nicht wirklich von einer Stelle aus auf alle Daten zugreifen kann ohne das "fetchen" der Daten nochmals durchzuführen. Da es große Datenmengen sein können, ist das daher nicht gerade performant.

Dein JS schnipsel gefällt mir. Danke schonmal

Btw: Die Statistik ist nur für Registrierte, daher wissen diejenigen das ohne JS nix läuft. Daher kann ich JS auch problemlos einsetzen
__________________
I did it my way - Senseless-Blog
Weihnachtsgeschenk? Schülern helfen - Bodypainting Kalender für 2009
WarrenFaith ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 18.03.2007, 16:01 Nach oben    #4
Johannes Müller
 
Benutzerbild von $traight-$hoota
 
Registriert seit: 15.09.2005
Ort: Königreich Flieden
Beiträge: 551
Standard

Zitat:
Zitat von WarrenFaith Beitrag anzeigen
Das Problem ist, dass ich nicht wirklich von einer Stelle aus auf alle Daten zugreifen kann ohne das "fetchen" der Daten nochmals durchzuführen. Da es große Datenmengen sein können, ist das daher nicht gerade performant.
ähm... HÄ? (hessisches Fragewort mit zwei Buchstaben)
also ich versteh überhaupt nicht, was du damit sagen willst^^

ok, wenn das eh nur für user mit js und css verfügbar sein soll, kannst du dir das mit der tabelle aber auch fast sparen und die daten vllt direkt als js-objekt übergeben (auch wenn ich noch nicht kapiere, warum die berechnung nicht serverseitig erfolgen kann).
also ungefähr so:
java Code:
  1. protected void printDiagramCode(PrintWriter out, Map<String, Integer> values){
  2.     out.println("<script type=\"text/javascript\">");
  3.     out.println("diagramData = {");
  4.     foreach(String label : values.keySet()){
  5.         out.println("\t" + label + ": " + values.get(label) + ",");
  6.     }
  7.     out.println("};");
  8.     out.println("</script>");
  9. }
was dann folgenden js code generieren soll:
javascript Code:
  1. <script type="text/javascript">
  2. diagramData = {
  3.     januar: 233,
  4.     februar: 8574,
  5.     /* etc. */
  6. };
  7. </script>
diese daten kannst du dann direkt verarbeiten und müssen nicht mehr aus dem html-code ausgelesen werden.
__________________
Weißt Bescheid - Scheiß wie weit
$traight-$hoota ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 19.03.2007, 09:59 Nach oben    #5
Martin Breuer
 
Benutzerbild von WarrenFaith
 
Registriert seit: 17.08.2005
Ort: Berlin
Beiträge: 1.653
Standard

Da hab ich den ganzen abend das in JS umgesetzt und dann beim Zähneputzen gegen 3 Uhr morgens fiel mir ein, was für nen Logikfehler ich gemacht hab.

Logisch gehts auch serverseitig! Damn aber gut, dass Positive ist, ich hab bissle JS-Kenntnis erlangt

Danke dir nochmal für deine Hilfe!
__________________
I did it my way - Senseless-Blog
Weihnachtsgeschenk? Schülern helfen - Bodypainting Kalender für 2009
WarrenFaith ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 20.03.2007, 05:08 Nach oben    #6
Neuer Benutzer
 
Registriert seit: 31.05.2006
Beiträge: 24
Standard

Querkommentar von meiner Seite: Würde nicht den höchsten Wert als 100 nehmen (man verwendet da übrigens nicht den Begriff 100% sondern nur "100 als Ganzes" [/klugscheiß]) sondern würde es auf einen geraden Wert hochrechnen.

120.000 --> 150.000
345.545 --> 500.000

irgendwie sowas. Damit a) umgehst du dass Zwischenwerte allzu krumme Werte werden und b) wirkt es einfach logischer auch den größten Wert in ein system einzuordnen, anstatt den größten Wert als System zu verwenden.
KingCrunch ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 20.03.2007, 09:51 Nach oben    #7
Martin Breuer
 
Benutzerbild von WarrenFaith
 
Registriert seit: 17.08.2005
Ort: Berlin
Beiträge: 1.653
Standard

Ich hab allerdings ne feste maximal Breite meiner Balken, und wenn ich in einer Übersicht nur Werte zwischen 0 und 30 hab und in der nächtens Ansicht dann aber zwischen 0 und 3000, dann kann ich nicht sagen, 1 = 1px oder so.

Demzufolge nutze ich die maximale Breite und setze sie gleich mit dem maximalen Wert der Statistic.

Hab grade den Code nicht hier, aber ich pack ihn rein wenn ich daheim bin.
__________________
I did it my way - Senseless-Blog
Weihnachtsgeschenk? Schülern helfen - Bodypainting Kalender für 2009
WarrenFaith ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Antwort

Lesezeichen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind an
PingBacks sind an
RefBacks sind aus


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:14 Uhr.


Powered by vBulletin® Version 3.7.4 (Deutsch)
Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45