作者cjcat2266 (CJ Cat)
看板Flash
标题[情报] CJSignals快速处理阵列的技巧
时间Thu Jul 8 14:09:54 2010
这篇文章讲解了CJSignals改进AS3 Signals效能的技巧
只要你需要大量且快速地对阵列加入、移除物件
就可以考虑使用这招来大幅增进效能
Blog本文
http://bit.ly/cZiCsm
当一个listener被加入阵列
一个对应的ListenerData物件就会被生成
这个物件含有listener的reference
和在阵列中的index
除了阵列以外,还有一些辅助物件
dictionary - 用来对应listener和ListenerData物件
i - 用来储存"第一个null元素"的index用
1. 加入物件
在阵列的i位置存入物件,并且++i
使得i保持"第一个null元素的index"的身分
当阵列满了,就把阵列大小加倍
让"尾巴"多出更多的null元素空间
2. 移除物件
当处於j位置的物件要被移除,会先 --i
於是i会指在"最後一个非null元素"
j位置的值会被i位置的值取代
然後再把i位置的值设成null
使得i仍保持"第一个null元素的index"的身分
3. 排序
加入或移除元素的时候将一个boolean flag设成true
到了真的需要重新排序的时间点才进行排序,然後把flag设为false
而非每次加入或移除元素的时候就排序
例如CJSignals的排序时间点是"发出事件"或者"存取listener阵列"
内建的event system很有可能就是每次add/remove listener就马上排序
才导致效能严重低落
以上
Rusher也是用这个技巧来有效管理active components阵列
所以就算大量且频繁的加入和移除物件,也不会拖垮效能
--
CJ Cat = Croa'J Cat = Cockroach Cat = 西街凯特 = 蜚蠊猫 = 蟑螂猫
Blog
http://cjcat.blogspot.com
Gallery
http://cjcat2266.deviantart.com
ptt2 Board CJWorkshop - 阿多比闪光(Adobe Flash)研讨区
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 118.168.27.51
※ 编辑: cjcat2266 来自: 118.168.27.51 (07/08 14:10)
1F:推 kyzusmugoe:头推~原来rusher中有这个东西阿= ="........ 07/08 14:28
2F:推 STARGAZERs:推 ~ 不过太深奥了一下子无法理解阿@@" 07/08 14:55