BigListener
2015-01-24 13:18
我的优化代码如下:
// 优化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之间。
我觉得这两个效果大概是一样的啊。这是不是说明这样写的性能不是很高?
为什么会有这个性能上的区别?
我也出现下图的情况。所以增加了一个大于1000个球的判断。
while(balls.length > cnt || balls.length > 1000){ //删除cnt-1 后面的球 .删除超过1000的球
balls.pop();
}
算法的复杂度问题了~谢谢
我想这样做的效率应该是比较低的,我不知道splice函数具体是怎样实现的,但是如果是数组的删除的话,你在数组中删除了一个元素,其他元素需要进行前移,才能保证数组中间不会有空,这样你删除n个元素就移动了n*(n的位置后面的元素个数)个元素,而老师的方法是赋值之后再pop,理论上讲最多也就length那么长咯,所以是O(n),splice很容易就O(n方)了吧
改写成requextAnimationFrame 没有这个问题
还有一个问题就是,如果电脑不是一直在那个页面。那么性能优化代码好像就不工作。会出现这种情况:
麻烦各位谁懂的,给解释一下!
炫丽的倒计时效果Canvas绘图与动画基础
96746 学习 · 1000 问题
相似问题