Hi Leute,
das hat mir und Carsten Müller keine Ruhe gelassen,
wir haben jetzt ein interessantes Ergebniss:
- On-broadcastMessage-Listener-Remove-Bug ist behoben.
- Die broadcastMessage-Geschwindigkeit ist identisch.
- Das Entfernen von Listenern beim senden geht über 40mal schneller.
Testet das doch mal bitte, vielleicht sind wir ja auch
irgendwie blind...:-)
Besonders dritte Punkt ist interessant, scheint wohl an
der internen Speicherwaltung zu liegen, so nach dem Motto -
wenn Flash monotonere Arbeiten macht kommt es so richtig
in fahrt.
netten Gruß, Holger
<code>
o = ASBroadcaster;
o.oldAddListener = o.addListener;
o.oldRemoveListener = o.removeListener;
o.oldBroadcastMessage = o.broadcastMessage;
//
o.initialize = function (pObj) {
pObj.oldAddListener = this.oldAddListener;
pObj.oldRemoveListener = this.oldRemoveListener;
pObj.oldBroadcastMessage = this.oldBroadcastMessage;
pObj.addListener = this.addListener;
pObj.removeListener = this.removeListener;
pObj.broadcastMessage = this.broadcastMessage;
pObj._listeners = new Array();
pObj.__blnSending = false;
pObj.__arrObjectsToRemove = new Array();
}
//
o.addListener = function (pObj) {
var tmp = this._blnSending;
this._blnSending = false;
this.oldAddListener(pObj);
this._blnSending = tmp;
}
//
o.removeListener = function (pObj) {
if (this._blnSending == false)
this.oldRemoveListener(pObj);
else
this._arrObjectsToRemove.push(pObj);
}
//
o.broadcastMessage = function () {
this.__blnSending = true;
this.oldBroadcastMessage.apply(this, arguments);
this.__blnSending = false;
var l = this.__arrObjectsToRemove.length;
for (var i = 0; i < l; i++)
this.oldRemoveListener(this._arrObjectsToRemove[i]);
this._arrObjectsToRemove.splice(0);
}
</code>
------------------------------------------------------
Archiv : http://www.freelists.org/archives/ascoders/
Optionen : http://www.freelists.org/list/ascoders
------------------------------------------------------