精華區beta Flash 關於我們 聯絡資訊
※ 引述《etrexetrex (moonet)》之銘言: : //加速在這裡 : if(b[i] >= inverseALength) 補充說明一下 其實這裡不一定會完全加速喔 : //基本上 Array 的存取也會比 Object 快些 要看你的array是不是sparse array 意思就是你是否每一個element都有明確給值 一個Array物件內部底層其實分成一個陣列和一個binary search tree (dictionary) 從第0個開始的元素到最後一個連續的元素,是存在陣列 剩下的元素則是存在binary search tree裡面 這樣才不會浪費記憶體去存取undefined元素 如以下的code a[0] = 0; a[1] = 1; a[2] = 2; 那麼三個連續元素是儲存在底層陣列沒錯 存取起來速度會很快 但是以下code a[0] = 0; a[10] = 1; a[12] = 2; 只有a[0]是存在底層陣列 a[10]和a[12]是存在底層的binary search tree 存取起來的效能量級就是跟Object和Dictionary一樣的 再如 a[10000] = 1; 所消耗的記憶體不是10000個Number 而是只有一個Number而已,是用底層的binary search tree在存 所以如果真的要龜毛 你應要一開始把aInverse的所有元素都先初始化成-1或其他值 才可以真正得到array效能上的優勢 我記得以上豆知識是在Senocular的blog上看到的 :) -- 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.25.10
etrexetrex:wow 我不知道他有作 sparse 耶 10/10 09:57
cjcat2266:看看a[1000000] = 10會不會lag就知道有沒有做sparse囉~ 10/10 10:48