误解了光环的延迟! JS

时间:2014-07-14 23:43:31

标签: javascript loops for-loop

这是Javascript代码的一部分,我用它来永久检查导航器/设备的大小,以使我的网站响应:

//max screen size value for interactions with other elements : 

var getMaxSize = 0;

// Screen Inspector (initied on Body Onload) :

function Inspector()
{
    if (window.screen.width == 480)
        {
            getMaxSize = window.screen.width;
        }
    setInterval(function(){Inspector()}, 1000);
}
// rest (...)

Inspector功能只是一个循环,每1秒获取一次屏幕大小的值(我们不能说计算机没有足够的时间思考,对吧?)。 然而,几秒钟后,可能是15,我的RAM饱和。 为什么获取值并将其分配给变量是如此贪心?是对象" window.screen"太慢了?

2 个答案:

答案 0 :(得分:1)

每秒运行一次功能非常密集,旧版浏览器可能会慢下来。

要完成您想要的任务,您应该使用onresize事件的监听器,如下所示:

window.onresize=Inspector;

每次用户调整窗口大小时,这将运行Inspector函数,并且不会浪费系统资源。

答案 1 :(得分:0)

setInterval非常粗糙,几乎在每个实例中都可以避免。相反,由于Javascript是基于事件的语言,因此只有在检测到视图端口或屏幕大小发生更改的事件或您正在等待检查的自定义事件时,才应检查屏幕大小。在浏览器中有间隔是一般的不良做法...

此外,JavaScript本身也有一些非常好的垃圾收集,但你可能想要将一个间隔设置为一个变量,并在每次执行它的委托时清理它,以确保它一次只运行一次并且不是也开始在自身上面成倍增加。(由于递归而呈指数增长)