问答详情
源自:5-1 性能优化

性能优化的问题

我的优化代码如下:

//    优化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之间。

我觉得这两个效果大概是一样的啊。这是不是说明这样写的性能不是很高?

为什么会有这个性能上的区别?

提问者:BigListener 2015-01-24 13:18
微课

个回答

  • 兔老太
    2015-06-02 10:51:49
    已采纳

    我也出现下图的情况。所以增加了一个大于1000个球的判断。

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

            balls.pop();

        }



  • BigListener
    2015-09-18 11:05:21

    算法的复杂度问题了~谢谢

  • 哦哦哒
    2015-08-21 08:55:05

    我想这样做的效率应该是比较低的,我不知道splice函数具体是怎样实现的,但是如果是数组的删除的话,你在数组中删除了一个元素,其他元素需要进行前移,才能保证数组中间不会有空,这样你删除n个元素就移动了n*(n的位置后面的元素个数)个元素,而老师的方法是赋值之后再pop,理论上讲最多也就length那么长咯,所以是O(n),splice很容易就O(n方)了吧

  • 兔老太
    2015-06-04 14:13:38

    改写成requextAnimationFrame 没有这个问题

  • BigListener
    2015-01-24 13:38:44

    还有一个问题就是,如果电脑不是一直在那个页面。那么性能优化代码好像就不工作。会出现这种情况:

    54c32fc20001c00f05000225.jpg

    麻烦各位谁懂的,给解释一下!