[情報] CJSignals快速處理陣列的技巧
這篇文章講解了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)
推
07/08 14:28, , 1F
07/08 14:28, 1F
推
07/08 14:55, , 2F
07/08 14:55, 2F
討論串 (同標題文章)
以下文章回應了本文:
完整討論串 (本文為第 1 之 2 篇):