亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

性能優化的問題

我的優化代碼如下:

//????優化balls數組
????????????var?count=0;
????????????for(var?i=0;i<balls.length;i++)?{
???????????????if?(balls[i].x?<?-R?||?balls[i].x?>?WINDOW_WIDTH?+?R)?{
????????????????????balls.splice(i,1);
????????????????}
????????????}

這樣思維比較簡單,就是把不符合要求的小球清除出去。

但是實際運行效果是,balls的長度大概維持在450-500之間。

我覺得這兩個效果大概是一樣的啊。這是不是說明這樣寫的性能不是很高?

為什么會有這個性能上的區別?

正在回答

5 回答

我也出現下圖的情況。所以增加了一個大于1000個球的判斷。

? ? while(balls.length > cnt || balls.length > 1000){ //刪除cnt-1 后面的球 .刪除超過1000的球

? ? ? ? balls.pop();

? ? }



0 回復 有任何疑惑可以回復我~
#1

BigListener 提問者

非常感謝!
2015-07-28 回復 有任何疑惑可以回復我~

算法的復雜度問題了~謝謝

0 回復 有任何疑惑可以回復我~

我想這樣做的效率應該是比較低的,我不知道splice函數具體是怎樣實現的,但是如果是數組的刪除的話,你在數組中刪除了一個元素,其他元素需要進行前移,才能保證數組中間不會有空,這樣你刪除n個元素就移動了n*(n的位置后面的元素個數)個元素,而老師的方法是賦值之后再pop,理論上講最多也就length那么長咯,所以是O(n),splice很容易就O(n方)了吧

0 回復 有任何疑惑可以回復我~

改寫成requextAnimationFrame 沒有這個問題

0 回復 有任何疑惑可以回復我~

還有一個問題就是,如果電腦不是一直在那個頁面。那么性能優化代碼好像就不工作。會出現這種情況:

54c32fc20001c00f05000225.jpg

麻煩各位誰懂的,給解釋一下!

0 回復 有任何疑惑可以回復我~
#1

哦哦噠

這個應該是每個瀏覽器對setInterval的一個優化吧,當離開瀏覽器窗口的時候會默認暫停動畫效果以節約系統資源諸如內存,CPU,然后再回來的時候會對已經運行的動畫效果運用JS計算達到沒有好像沒離開過一樣,但是由于離開的這段時間其實這個Demo依然在做一些事情,所以就發生了這個bug,大概是這樣,具體原因可以百度一下瀏覽器對setInterval的處理相關方面的知識
2015-08-21 回復 有任何疑惑可以回復我~

舉報

0/150
提交
取消

性能優化的問題

我要回答 關注問題
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號