[ascoders] Re: addListener ruft auch removeListener auf

  • From: "Holger Kohnen" <h_kohnen@xxxxxx>
  • To: <ascoders@xxxxxxxxxxxxx>
  • Date: Sat, 19 Apr 2003 13:34:11 +0200

Hier das tolle Kaefer-Beispiel für den Bug:

<code>
Welt = function (pIntKaefer) {
 ASBroadcaster.initialize(this);
 while (pIntKaefer--)
  new Kaefer(this, pIntKaefer);
}
Welt.prototype.amageddon = function () {
 this.broadcastMessage('onAmageddon');
}

Kaefer = function (pObjWelt, pIntId) {
 this.intId = pIntId;
 this.objWelt = pObjWelt;
 this.objWelt.addListener(this);
}
Kaefer.prototype.onAmageddon = function () {
 trace(this.intId + ' hat das zeitliche gesegnet');
 this.objWelt.removeListener(this);
}

objWelt = new Welt(10);
objWelt.amageddon();

/*
Ausgabe:
9 hat das zeitliche gesegnet
7 hat das zeitliche gesegnet
5 hat das zeitliche gesegnet
3 hat das zeitliche gesegnet
1 hat das zeitliche gesegnet
*/
</code>

> > Da der ASBroadcaster sowieso in AS implementiert ist, macht das
> > performancetechnich keinen Unterschied.
>
> Einspruch :o)
>
> Probiere mal diesen Test hier:
>
> ---
> EventEng = {};
> ASBroadcaster.initialize ( EventEng );
> EventEng.onRender = function () { this.broadcastMessage ( "render" );};
>
> // erzeuge eine Hand voll Objekte//
> var objs = [];
> for ( var i = 0 ; i < 500 ; i++ ) {
>  var obj = objs[i] = {};
>  obj.render = function () {
>   abc += Math.sqrt ( a += 8 ); // irgentwas eben
>  }
>  EventEng.addListener ( obj );
> }
>
>
> ms = getTimer ();
> EventEng.onRender (); // 29 ms
> /*for ( var o in objs ) { // 49 ms
>  objs[o].render();
> }
> */
> trace ( getTimer() - ms );
> ---
>
> Der AsBroadcaster führt die Methoden
> bei allen Objekten wesentlich schneller aus.
>
>
> aM
> http://www.andre-michelle.com
>
>
> ------------------------------------------------------
> Archiv   : //www.freelists.org/archives/ascoders/
> Optionen : //www.freelists.org/list/ascoders
> ------------------------------------------------------
>
>

------------------------------------------------------
Archiv   : //www.freelists.org/archives/ascoders/
Optionen : //www.freelists.org/list/ascoders
------------------------------------------------------

Other related posts: