| |||||||
Du magst keine Werbung? Wir auch nicht!
Einfach registrieren und die Werbung ist weg. Diese Nachricht sehen nur nicht registrierte Nutzer.
![]() |
| | LinkBack | Themen-Optionen | Ansicht |
| | #1 (permalink) |
| Neuer User Registriert seit: Feb 2011
Beiträge: 8
| Performance Probleme mit geladenen jpgs
Hallo allerseits, ich arbeite jetzt schon seit einiger Zeit an einer interaktiven Zeitleiste, jedoch bekomme ich bei größeren Dateien starke Performanceprobleme. Prinzip der Zeitleiste: Es werden Thumbnails mit Namen und Jahreszahl auf der x Achse nach Jahreszahl sortiert angezeigt. Durch Klicken erhält der Anwender weitere Informationen, durch ein "ziehen" der Leiste kann man die Thumbnails verschieben um sich so durch die Zeit zu bewegen. Insagesamt gibt es 3 Reihen dieser Thumbs die übereinander sind. Problem: Bei mehr als 50 Einträgen wird das ganze sehr ruckelig. Jedoch hat die Anwendung laut Taskmanager nur 40MB Arbeitsspeicher und max. 15% CPU Auslastung. Realisierung (mögliche Ursachen): Laden der Thumbs: Code: imageThumbs[line][id] = new Loader(); imageThumbs[line][id] = loadSomeImage(fileName); Code: function loadSomeImage(fileName:String):Loader {
var imageRequest:URLRequest=new URLRequest(fileName);//define source
var ret = new Loader();
ret.load(imageRequest);//load from defined source
return ret;
} Code: function updateImages():void {
var i:int;
var j:int;
for (i = 0; i < 3; i++)
{
for (j = 0; j < n[i]; j++)
{
//nur aktualisieren wenn Bild im Anzeigebereich ist (big-data-lag fix)
if (((saveDates[i][j] - tmpDate)*pixelsPerYear > - 500) && ((saveDates[i][j] - tmpDate)*pixelsPerYear < SCREEN_WIDTH + 500)){
imageThumbs[i][j].x = (saveDates[i][j] - tmpDate)*pixelsPerYear;
avatarCaption[i][j].x = imageThumbs[i][j].x + (imageThumbs[i][j].width - avatarCaption[i][j].width) / 2;
avatarDate[i][j].x = imageThumbs[i][j].x + (imageThumbs[i][j].width - avatarDate[i][j].width) / 2;
}
}
}
} Ich hoffe, dass mir hier jemand einen Tipp geben kann, wo das Problem liegt. Falls Einsicht in die Zeitleiste gewünscht wird kann ich eine URL per PM verschicken. Aus bestimmten Gründen kann ich die URL hier nicht öffentlich posten. |
| | |
| | #2 (permalink) |
| langsam checker Registriert seit: Mar 2003 Ort: -
Beiträge: 199
|
hm also nachdem ich jetzt mal schnell über deinen code geguggt habe kann ich mit nem schnellschuss sagen: - es könnte an deiner sehr verschachtelten formel liegen in updateImages(). - es könnte an eventuellen transparenzen oder effekten wie glow, schatten, usw die auf der zeitleiste sowie thumbnails verbaut worden sind, liegen. was mir aber mal helfen würde wäre ein link zu der zeitleiste damit ich das ding mal aktiv betrachten kann. geht das? grüße
__________________ *** stiffmeister *** |
| | |
| | #3 (permalink) |
| Odin zum Gruße! Registriert seit: Nov 2006 Ort: Ösiland
Beiträge: 327
| PHP-Code: |
| | |
| | #4 (permalink) |
| Neuer User Registriert seit: Feb 2011
Beiträge: 8
|
Danke für die Antwort, habe dir nen Link geschickt. Dort ruckelt es übrigens nicht, da online nur wenige Einträge eingetragen sind. (Die Leiste soll eigentlich lokal auf einem Touch-Screen laufen) Also die verschachtelte Formel funktioniert. Ich verschiebe sogar nur die Elemente in der Nähe des sichtbaren Bereichs um den Aufwand gering zu halten... Natürlich kann es an den Schleifendurchgängen liegen aber da die Laufzeit linear ist würde mich das schon wundern. Effekte benutze ich gar keine. @Oxigan: Das nimmt jetzt 2 additionen raus... sollte in einer Schleife eigentlich egal sein. (Siehe Linearität) Geändert von neogucky (11-02-2011 um 11:04 Uhr) |
| | |
| | #5 (permalink) |
| Flash-Designer Registriert seit: May 2006 Ort: Wiesbaden
Beiträge: 6.162
|
Auch wenn ich nicht garantieren kann, dass es tatsächlich was damit zu tun hat, würde ich Dir empfehlen, nicht mit Unmengen an parallelen, 2dimensionalen Arrays zu arbeiten... PHP-Code: PHP-Code:
__________________ Viele Grüße // Martin Martin Kraft // Interaktionsdesign Hilfreiche Websites: // Hilfe zur Adobe Flash Plattform // ActionScript 2 Referenz // ActionScript 3 Referenz // ActionScript 3 Arbeitshandbuch // weitere Flash Ressourcen Bitte keine Flashfragen per PM oder Profilnachricht! Dafür ist das Forum da! Geändert von Martin Kraft (11-02-2011 um 11:05 Uhr) |
| | |
| | #6 (permalink) |
| Neuer User Registriert seit: Feb 2011
Beiträge: 8
|
Danke Martin, auch wenn ich nicht glaube, dass das etwas mit der Performance zu tun hat sieht es deutlich übersichtlicher aus! Ich muss auch dazu sagen, dass ich das Projekt angefangen hatte als ich mit AS3 das erste mal gearbeitet habe und daher einiges drin habe das ich nicht so mag. Aber da das Programm fast 2000 Zeilen an Code hat möchte ich nicht alles neu machen. Geändert von neogucky (11-02-2011 um 11:10 Uhr) |
| | |
| | #7 (permalink) |
| Odin zum Gruße! Registriert seit: Nov 2006 Ort: Ösiland
Beiträge: 327
| unrecht du hast. Genau sowas sollte man vermeiden und vorallem gerade in enter frames. Wenn du sowas als nicht notwendig erachtest, möchte ich nicht sehen wie es in deinem enter_frame aussieht... ( ich schätze mal updateImages() wird aus der enter_frame aufgerufen )
Geändert von Oxigan (11-02-2011 um 11:12 Uhr) |
| | |
| | #8 (permalink) |
| langsam checker Registriert seit: Mar 2003 Ort: -
Beiträge: 199
|
nicht nur weil ich den Oxigan privat kenne sondern auch weil er recht hat stimme ich dem zu. ausserdem sollte man rechnungen nicht in der for oder while schleife abhandlen lassen sondern bereits ausserhalb, ausser es geht wirklich nicht anders. auch dies bringt einen performance schub (minimal aber in millisekunden doch etwas ....) weiters merke dir: auch kleinvieh macht mist! danke für den link. bei mir ruckelt es jetzt schon mit den wenigen einträgen, dies liegt aber mehr an den bildern, warum? nja pixelgenauigkeit und die raster der tft monitoren. egal, probier mal die bilder als bitmap zu laden und dann smoothing = true anzuwenden. ausserdem wäre hier deine drag & drop function hilfreich. wenn dus mit dem flash eingebauten drag() machst, vergiss es gleich
__________________ *** stiffmeister *** |
| | |
| | #9 (permalink) |
| Neuer User Registriert seit: Feb 2011
Beiträge: 8
|
Wie ich schon sagte, Linearität ist das wichtige. Wenn 2 Additionen mein Programm runterziehen in der Schleife ist was grundlegendes falsch. Das mit dem Bitmap laden kann ich gerne mal probieren. Wie genau mache ich das? Wäre es vielleicht auch möglich die gesamte Ebene zu bewegen und dadurch Operationen zu sparen? Die Bewegung habe ich mit Mouse up/down/move Events realisiert in denen ich das "tmpDate" je nach Mausbewegung verändere. Außerdem wird dann im MouseMove die UpdateImages aufgerufen. |
| | |
| | #10 (permalink) |
| langsam checker Registriert seit: Mar 2003 Ort: -
Beiträge: 199
|
hmm. ok. als erster lädst du das bild mit der Loader() class. dannach bei Event.INIT sagst du ... PHP-Code:
__________________ *** stiffmeister *** |
| | |
| | #11 (permalink) |
| Neuer User Registriert seit: Feb 2011
Beiträge: 8
|
Na updatesImages ist vermutlich die Funktion die du mit "Drag & Drop Funktion" meinst. Und ja, da werden alle Bilder (die im Anzeigebereich sind) einzeln auf die richtige Position gebracht. Alle in einen Container zu setzen wäre eine Möglichkeit die ich gerne nutzen würde, nur leider weiß ich nicht wie das funktioniert. Falls du da nen Tipp für mich hast probiere ich den auch gerne aus! |
| | |
| | #12 (permalink) |
| langsam checker Registriert seit: Mar 2003 Ort: -
Beiträge: 199
| PHP-Code:
__________________ *** stiffmeister *** Geändert von stiffmeister (11-02-2011 um 12:49 Uhr) |
| | |
| | #13 (permalink) |
| Neuer User Registriert seit: Feb 2011
Beiträge: 8
|
Danke für den Tipp, das hört sich ja genau nach dem an was ich suche. Jedoch konnte es das Ruckeln auch nicht lösen. Gibt es eine Möglichkeit sowas über die GPU gehen zu lassen? Oder auch über andere Methoden Flash mehr Rechenkapazität zu geben? Denn Flash nutzt ja lange nicht alles, was mein Rechner zu bieten hat. |
| | |
| | #14 (permalink) |
| whatever Registriert seit: May 2008
Beiträge: 419
|
gpu geht nicht, es ist einfach so das in flash das verschieben von vielen bild objekten gleichzeitig (auch wenn sie alle in einem container sind) enorm an der performance zieht, das war irgendwie schon immer so, auch wenn es nur kleine bilder sind. hatte das problem auch mal wo man diverse thumbs nach links und recht verschieben konnte. das einzigste was half ware die ganzen bilder in ein bitmapdata objekt zu kopieren und nur noch dieses anzuzeigen und verschieben. ist ein ziemlicher aufwand aber performance mäßig nicht zu toppen |
| | |
| | #15 (permalink) |
| Neuer User Registriert seit: Feb 2011
Beiträge: 8
|
Hm meine Bilder sind recht weit auseinander. Das wäre dann ja quasi ein Bild mit einer Breite von ca. 80.000 Pixeln wenn ich dich richtig verstehe. Ist das dann auch noch performant? Falls ja, magst du mir deine Funktion zum erstellen des bitmapdata objekts einmal zeigen? Also Wie du da alle Bilder reinsetzt? |
| | |
![]() |
| Lesezeichen |
| Stichworte |
| actionscript, bilder laden, performance |
| Themen-Optionen | |
| Ansicht | |
| |
Ähnliche Themen | ||||
| Thema | Autor | Forum | Antworten | Letzter Beitrag |
| Performance-Probleme beim Nachladen von JPGs | curiosity | Flash CS3 Professional | 3 | 17-09-2007 17:14 |
| Höhe des geladenen jpgs auslesen | BigO | ActionScript 1 | 1 | 16-10-2005 14:30 |
| Mittig positionieren von geladenen JPGs die 2-te | DeMoehn | ActionScript 1 | 4 | 11-02-2005 18:50 |
| onLoadComplete Größe des geladenen jpgs abfragen | Jocki | ActionScript 1 | 23 | 30-09-2004 17:44 |
| film mit dynamisch geladenen jpgs | Joyce | Flash MX | 4 | 08-04-2004 12:06 |