我有一个运行 onload 的 setInterval 函数,用户一直在我的网站上。基本上它所做的是逐步扫描 window.innerWidth 和 window.outerWidth 之间的差异(也就是它检测用户是否以 100% 缩放以外的方式查看网站),并对其进行补偿,因为我需要一个固定对象缩小时居中对齐,但放大时左对齐。现在该功能每 250 毫秒运行一次。我要问的是,这对网页有什么影响,如果有的话?
问问题
1875 次
3 回答
3
您应该阅读一篇名为How JavaScript Timers Work的文章。基本上,所有的 js 代码都在一个事件循环中运行,所有的事件处理程序都排队,并尽快执行:
为了理解定时器是如何在内部工作的,有一个重要的概念需要探索:定时器延迟是不能保证的。由于浏览器中的所有 JavaScript 都在单个线程上执行,因此异步事件(例如鼠标单击和计时器)仅在执行过程中有空缺时才会运行。
有时甚至可能不执行计时器处理程序;有些情况下超时过期两次,但解释器只有一次机会运行处理程序,丢弃另一个排队的事件。
真的,阅读那篇文章,这是值得的。
于 2012-11-12T01:11:33.733 回答
1
如果您仅每四分之一秒运行一次,它“不应该”产生太大影响。我说不应该是因为我不确切知道它在 a) 决定是否需要调整和 b) 进行上述调整。
也就是说,这听起来像是为事件而不是轮询而设计的情况。也许你应该看看window.onresize
。
于 2012-11-12T00:58:37.187 回答
0
如果您的其他问题中的某些答复充分回答了您的问题,出于礼貌,您应该接受它们作为模态答案。
此外,您的setInterval
运行间隔为 250 毫秒。如果您的函数完成执行的时间超过 250 毫秒,那么可能会导致它们连续运行,从而降低用户计算机的速度。
@ime-vidas 给出了一种更好的方法,它将您的函数排队,以便在前一个函数结束后运行延迟。
于 2012-11-12T01:39:50.363 回答