Leistungsoptimierung für die ADOBE FLASH-PLATTFORM
Leistungsoptimierung für die ADOBE® FLASH®-PLATTFORM
Leistungsoptimierung für die ADOBE® FLASH®-PLATTFORM
Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.
YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.
LEISTUNGSOPTIMIERUNG FÜR DIE <strong>FLASH</strong>-<strong>PLATTFORM</strong><br />
Minimieren der CPU-Auslastung<br />
// Use a low frame rate for the application<br />
stage.frameRate = 10;<br />
// Choose one update per second<br />
var updateInterval:int = 1000;<br />
var myTimer:Timer = new Timer(updateInterval,0);<br />
myTimer.start();<br />
myTimer.addEventListener( TimerEvent.TIMER, updateControls );<br />
function updateControls( e:TimerEvent ):void<br />
{<br />
// Update controls here<br />
// Force the controls to be updated on screen<br />
e.updateAfterEvent();<br />
}<br />
Durch Aufruf der updateAfterEvent()-Methode ändert sich <strong>die</strong> Bildrate nicht. Die Methode zwingt <strong>die</strong><br />
Laufzeitumgebung nur, den Inhalt auf dem Bildschirm zu aktualisieren, der sich geändert hat. Die Zeitleiste läuft<br />
immer noch mit einer Bildrate von 10 fps. Beachten Sie, dass Timer und ENTER_FRAME-Ereignisse auf Geräten mit<br />
niedriger Leistung nicht hundertprozentig genau sind, und auch dann nicht, wenn Ereignisprozedurfunktionen<br />
verarbeitungsintensiven Code enthalten. Genau wie <strong>die</strong> Bildrate der SWF-Datei kann auch <strong>die</strong> Aktualisierungsbildrate<br />
des Timers in manchen Situationen variieren.<br />
Halten Sie <strong>die</strong> Anzahl der Timer-Objekte und registrierten enterFrame-Prozeduren in Ihrer Anwendung gering.<br />
In jedem Bild setzt <strong>die</strong> Laufzeitumgebung ein enterFrame-Ereignis an alle Anzeigeobjekte in ihrer Anzeigeliste ab. Sie<br />
können zwar Listener <strong>für</strong> das enterFrame-Ereignis mit mehreren Anzeigeobjekten registrieren, <strong>die</strong>s bedeutet jedoch,<br />
dass in jedem Bild mehr Code ausgeführt wird. Überlegen Sie stattdessen, eine einzelne zentrale enterFrame-<br />
Prozedur zu verwenden, <strong>die</strong> den gesamten Code ausführt, der in jedem Bild ausgeführt werden soll. Dadurch kann<br />
häufig ausgeführter Code einfacher verwaltet werden.<br />
Auf ähnliche Weise entsteht beim Verwenden von Timer-Objekten eine höhere Verarbeitungslast durch das Erstellen<br />
und Absetzen von Ereignissen aus mehreren Timer-Objekten. Wenn unterschiedliche Operationen in verschiedenen<br />
Intervallen ausgelöst werden müssen, kommen folgende Alternativen infrage:<br />
Verwenden Sie möglichst wenige Timer-Objekte und gruppieren Sie Operationen nach der Häufigkeit ihres<br />
Auftretens..<br />
Verwenden Sie zum Beispiel einen Timer <strong>für</strong> häufige Operationen, der alle 100 Millisekunden ausgelöst wird.<br />
Verwenden Sie einen anderen Timer <strong>für</strong> weniger häufige oder Hintergrundoperationen, der alle 2000<br />
Millisekunden ausgelöst wird.<br />
Verwenden Sie ein einzelnes Timer-Objekt und lassen Sie Operationen zu Vielfachen der delay-Eigenschaft des<br />
Timer-Objekts auslösen.<br />
Zum Beispiel könnten Sie einige Operationen haben, <strong>die</strong> alle 100 Millisekunden ausgeführt werden sollen, und<br />
anderen, <strong>die</strong> alle 200 Millisekunden ausgeführt werden sollen. Verwenden Sie in <strong>die</strong>sem Fall ein einzelnes Timer-<br />
Objekt mit einem delay-Wert von 100 Millisekunden. Fügen Sie in der timer-Ereignisprozedur eine bedingte<br />
Anweisung hinzu, <strong>die</strong> <strong>die</strong> 200-Millisekunden-Operation nur jedes zweite Mal ausführt. Diese Vorgehensweise wird<br />
im folgenden Beispiel veranschaulicht:<br />
Letzte Aktualisierung 9.5.2012<br />
35