Zurück   Flashforum > Flash > ActionScript > ActionScript 1

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 27-10-2002, 14:35   #1 (permalink)
wolter.biz
 
Benutzerbild von wolter
 
Registriert seit: Jun 2001
Ort: Düsseldorf
Beiträge: 3.395
Mal ein kleiner Tipp zur Performance

hallo zusammen,

mal ein kleiner tipp zu performance. nicht immer liegt es auf der hand, aber oft gibt es mehrere wege zum ziel und der offensichtlichste muss nicht der beste sein. ich schlage mich hier zum beispiel gerade viel mit trigonometrie rum und da viel mir auf, dass ich viel von dem krahm mit sinus und cosinus auch mit phytagoras lösen kann. das erste folgende skript (abgesehen von rundungsungenauigkeiten bei flash) ist zum beispiel fast zehn prozent langsamer als das darauffolgende:

ActionScript:
  1. _root.onEnterFrame=function () {
  2.     var startTime=getTimer();
  3.     var radius=10;
  4.     for (var i=0; i<1000; i++) {
  5.         var y=0.5;
  6.         var x=Math.sin(Math.acos(y/radius))*radius;
  7.         //var x=Math.sqrt(radius*radius-y*y);
  8.     }
  9.     var endTime=getTimer();
  10.     trace(endTime-startTime);
  11. }
  12.  
  13. _root.onEnterFrame=function () {
  14.     var startTime=getTimer();
  15.     var radius=10;
  16.     for (var i=0; i<1000; i++) {
  17.         var y=0.5;
  18.         // var x=Math.sin(Math.acos(y/radius))*radius;
  19.         var x=Math.sqrt(radius*radius-y*y);
  20.     }
  21.     var endTime=getTimer();
  22.     trace(endTime-startTime);
  23. }

ach ja. beide skripts berechnen abhängig von einer y-position, die zugehörige x-koordinate auf einer kreisbahn (radius). und die schleife ist dafür da, um überhaupt genügend rechnungen zusammen zu kriegen, da die dauer sonst nicht messbar ist...

gruss,

sascha.
wolter ist offline   Mit Zitat antworten
Alt 27-10-2002, 15:03   #2 (permalink)
helpQLODhelp
 
Benutzerbild von bokel
 
Registriert seit: Feb 2002
Ort: Köln
Beiträge: 8.505
Sehr schön.
Nicht dass ich oft solche Berechnung durchführe,
aber hier ist eine mögliche Anwendung (fürs Buch)

Ein Kreis ohne Trigonometrie:

ActionScript:
  1. //Kreis
  2. radius = 100;
  3. y = -radius;
  4. x = Math.sqrt(radius*radius-y*y);
  5. lineStyle(0);
  6. //
  7. moveTo(x,y);
  8. for(y=-radius; y<=radius; y++){
  9.     x=Math.sqrt(radius*radius-y*y);
  10.     lineTo(x, y);
  11. };
  12. //
  13. for(y=radius; y>=-radius; y--){
  14.     x=Math.sqrt(radius*radius-y*y);
  15.     lineTo(-x, y);
  16. };
  17. //ralf bokelberg 10/2002 helpqlodhelp.de
  18.  

mfg r.
bokel ist offline   Mit Zitat antworten
Alt 27-10-2002, 15:22   #3 (permalink)
helpQLODhelp
 
Benutzerbild von bokel
 
Registriert seit: Feb 2002
Ort: Köln
Beiträge: 8.505
... und gleich noch ein paar Variationen,
die auch ganz hübsch sind. Na ja, für
Sonntagnachmittag und Windstärke 8
auf jeden Fall:

ActionScript:
  1. function sonntagNachmittagUndWindstaerke8(radius, xSign, ySign, inc){
  2.     var y = -radius;
  3.     var x = Math.sqrt(radius*radius-y*y);
  4.     this.clear();
  5.     this.lineStyle(0);
  6.     this.moveTo(x,y);
  7.     //
  8.     for(y=-radius; y<=radius; y+=inc){
  9.         x=Math.sqrt(radius*radius-y*y);
  10.         this.lineTo(x * xSign, y * ySign)
  11.         this.lineTo(x, y);
  12.     }
  13. }//ralf bokelberg 10/2002 helpqlodhelp.de
  14.  
  15.  
  16. createEmptyMovieClip("mc1", 1);
  17. mc1._x = 100;
  18. sonntagNachmittagUndWindstaerke8.apply(mc1, [100, -1, 1, 5]);
  19.  
  20. createEmptyMovieClip("mc2", 2);
  21. mc2._x = 320;
  22. sonntagNachmittagUndWindstaerke8.apply(mc2, [100, -1, -1, 5]);
  23.  
  24. createEmptyMovieClip("mc3", 3);
  25. mc3._x = 540;
  26. sonntagNachmittagUndWindstaerke8.apply(mc3, [100, 1, -1, 5]);

mfg r.

Geändert von bokel (27-10-2002 um 16:07 Uhr)
bokel ist offline   Mit Zitat antworten
Alt 27-10-2002, 16:25   #4 (permalink)
ontheoutsidelookingin
 
Benutzerbild von dassoud
 
Registriert seit: Jun 2001
Ort: Dortmund
Beiträge: 5.897
Thumbs up

hui, mir kommt das momentan eher so vor wie windstärke 10, aber ich habe ja auch keine ahnung...

wieauchimmer: sehr schöne überlegungen, sehr schöne beispiele!

dassoud
__________________

33rpm
dassoud ist offline   Mit Zitat antworten
Alt 27-10-2002, 16:33   #5 (permalink)
wolter.biz
 
Benutzerbild von wolter
 
Registriert seit: Jun 2001
Ort: Düsseldorf
Beiträge: 3.395
wirklich schöne beispiele...

gruss,

sascha.

p.s.: aber das beispiel mit _brightness gefällt mir noch besser . das werde ich wohl wirklich für das buch adaptieren...
wolter ist offline   Mit Zitat antworten
Alt 27-10-2002, 17:58   #6 (permalink)
helpQLODhelp
 
Benutzerbild von bokel
 
Registriert seit: Feb 2002
Ort: Köln
Beiträge: 8.505
gern geschehen

wann ist es denn eigentlich soweit ?

mfg r.
bokel ist offline   Mit Zitat antworten
Alt 27-10-2002, 18:02   #7 (permalink)
wolter.biz
 
Benutzerbild von wolter
 
Registriert seit: Jun 2001
Ort: Düsseldorf
Beiträge: 3.395
so schnell wie möglich . mit einem genauen termin tue ich mich aber noch schwer, da ich keinen "schnellschuss" abliefern möchte. ich hoffe noch dieses jahr, aber ich will nichts versprechen, denn ständig finde ich neue sachen, die ich noch einbauen möchte und dann gibt es ja auch noch normale arbeit, die zu erledigen ist...

gruss,

sascha.
wolter ist offline   Mit Zitat antworten
Alt 27-10-2002, 22:54   #8 (permalink)
Neuer User
 
Registriert seit: Apr 2002
Ort: Vorm PC
Beiträge: 1.583
guter tipp und ist auch verständlich, operatoren sind schon immer schneller.

auch ein tipp für einzelne Buchstaben(a-z):

ActionScript:
  1. ft = getTimer(); for(i = 0; i<1000;i++){}; ft = getTimer()-ft;
  2. s = "a";
  3. t = getTimer();
  4. for(i = 0; i<1000;i++){
  5. // a = s.toUpperCase();
  6. // b = a.toLowerCase();
  7.   a = chr(223 & ord(s)); //in Großbuchstabe
  8.   b = chr(32 | ord(a)); //in Kleinbuchstabe
  9. }
  10. trace(getTimer()-t-ft);
  11. trace(a);
  12. trace(b);

noch ein tipp: nicht als funktion einbauen, denn funktionaufrufe kosten mehr.
Gnut ist offline   Mit Zitat antworten
Alt 27-10-2002, 22:57   #9 (permalink)
◘ ◘
 
Benutzerbild von beachmeat
 
Registriert seit: Dec 2001
Ort: Amsterdam
Beiträge: 6.126
Zitat:
Geschrieben von Gnut

noch ein tipp: nicht als funktion einbauen, denn funktionaufrufe kosten mehr.
Nicht mehr im aktuellen Betarelease des FlashPlayer, zumindest dort ca. 30% schneller (lt. Bokels Blog)
__________________
jeden Tag frisch

Geändert von beachmeat (28-10-2002 um 00:16 Uhr)
beachmeat ist offline   Mit Zitat antworten
Alt 28-10-2002, 10:26   #10 (permalink)
helpQLODhelp
 
Benutzerbild von bokel
 
Registriert seit: Feb 2002
Ort: Köln
Beiträge: 8.505
@gnut
Du darfst aber nicht Äpfel mit Birnen vergleichen:

ActionScript:
  1. s = "abcdefghijklmnopqrstuvwxyz";
  2. t = getTimer();
  3. for(i=0;i<1000;i++){
  4.     s1 = "";
  5.     for(j=0; j<s.length; j++){
  6.         s1 += chr(ord(s.charAt(j)) & 223);   
  7.     }
  8.     s2 = "";
  9.     for(j=0; j<s.length; j++){
  10.         s2 += chr(ord(s.charAt(j)) | 32);      
  11.     }
  12. }
  13. trace((getTimer() - t) + ":" + s1);
  14.  
  15. s = "abcdefghijklmnopqrstuvwxyz";
  16. t = getTimer();
  17. for(i=0;i<1000;i++){
  18.     s = s.toUpperCase();
  19.     s = s.toLowerCase();
  20. }
  21. trace((getTimer() - t) + ":" + s);

Ergebnis:
10143:ABCDEFGHIJKLMNOPQRSTUVWXYZ
190:abcdefghijklmnopqrstuvwxyz

ActionScript:
  1. s = "a";
  2. t = getTimer();
  3. for(i=0;i<1000;i++){
  4.     s1 = chr(ord(s.charAt(0)) & 223);      
  5.     s2 = chr(ord(s.charAt(0)) | 32);       
  6. }
  7. trace((getTimer() - t) + ":" + s1);
  8.  
  9. s = "a";
  10. t = getTimer();
  11. for(i=0;i<1000;i++){
  12.     s = s.toUpperCase();
  13.     s = s.toLowerCase();
  14. }
  15. trace((getTimer() - t) + ":" + s);

Ergebnis
186:A
157:a

ActionScript:
  1. s = "a";
  2. t = getTimer();
  3. for(i=0;i<1000;i++){
  4.     s1 = chr(ord(s) & 223);  
  5.     s2 = chr(ord(s) | 32);   
  6. }
  7. trace((getTimer() - t) + ":" + s1);
  8.  
  9. s = "a";
  10. t = getTimer();
  11. for(i=0;i<1000;i++){
  12.     s = s.toUpperCase();
  13.     s = s.toLowerCase();
  14. }
  15. trace((getTimer() - t) + ":" + s);

Ergebnis:
73:A
162:a

Also nur für den seltenen Fall, dass man einen
String der Länge 1 konvertieren möchte, ergibt sich
ein Vorteil.

mfg r.
bokel ist offline   Mit Zitat antworten
Alt 28-10-2002, 12:05   #11 (permalink)
querdenker
 
Benutzerbild von kelor
 
Registriert seit: Jun 2001
Ort: formel1-stadt hockenheim
Beiträge: 4.731
Thumbs up

schön aufgezeigt, bokel.....


greetz

kelor
kelor ist offline   Mit Zitat antworten
Alt 28-10-2002, 13:49   #12 (permalink)
Neuer User
 
Registriert seit: Apr 2002
Ort: Vorm PC
Beiträge: 1.583
@bokel: jupp, das habe ich auch gesagt(geschrieben)...
Gnut ist offline   Mit Zitat antworten
Alt 28-10-2002, 14:03   #13 (permalink)
Flashworker
 
Benutzerbild von sebastian
 
Registriert seit: Nov 2001
Ort: Wiesbaden
Beiträge: 10.945
Zitat:
Geschrieben von wolter
wirklich schöne beispiele...
Jau, kann ich nur zustimmen.

Ja, bin auch schon auf das Buch gespannt - ist schon bestellt soweit ich weiß..

Sebastian
sebastian ist offline   Mit Zitat antworten
Alt 28-10-2002, 17:34   #14 (permalink)
helpQLODhelp
 
Benutzerbild von bokel
 
Registriert seit: Feb 2002
Ort: Köln
Beiträge: 8.505
@gnut

Sorry ja, habe ich gar nicht gesehen.

Die Methode zum Buchstaben umwandeln
ist auf jeden Fall erwähnenswert, auch wenn
sie mit einigen Sonderzeichen nicht funktioniert:

ActionScript:
  1. for(i=32; i<256; i++){
  2.     trace(chr(i) + ":" + chr(i | 32) + ":" + chr(i & 223));
  3. }

mfg r.

Geändert von bokel (28-10-2002 um 17:37 Uhr)
bokel ist offline   Mit Zitat antworten
Alt 28-10-2002, 18:29   #15 (permalink)
Neuer User
 
Registriert seit: Apr 2002
Ort: Vorm PC
Beiträge: 1.583
ab und zu mal kleine sache ins archiv stellen schadet ja nichts.
ich weiss dann wenigstens wo ich sie wieder finde.












ps: deine antwort war zu sanft
Gnut ist offline   Mit Zitat antworten
Antwort

Lesezeichen

Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre 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 an



Alle Zeitangaben in WEZ +1. Es ist jetzt 19:10 Uhr.

Domains, Webhosting & Vserver von Host Europe
Unterstützt das Flashforum!
Adobe User Group


Copyright ©1999 – 2012 Marc Thiele