性能优化的问题

来源:5-1 性能优化

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之间。

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

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

写回答 关注

5回答

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

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

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

            balls.pop();

        }



    BigLis...

    非常感谢!

    2015-07-28 10:09:33

    共 1 条回复 >

  • 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

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

    哦哦哒

    这个应该是每个浏览器对setInterval的一个优化吧,当离开浏览器窗口的时候会默认暂停动画效果以节约系统资源诸如内存,CPU,然后再回来的时候会对已经运行的动画效果运用JS计算达到没有好像没离开过一样,但是由于离开的这段时间其实这个Demo依然在做一些事情,所以就发生了这个bug,大概是这样,具体原因可以百度一下浏览器对setInterval的处理相关方面的知识

    2015-08-21 08:48:27

    共 1 条回复 >

炫丽的倒计时效果Canvas绘图与动画基础

学习HTML5中最激动人心的技术Canvas,彻底释放自己的创造力

96746 学习 · 1000 问题

查看课程

相似问题