Javascript setInterval似乎很慢?

时间:2011-08-22 03:02:05

标签: javascript

所以我试图做一个setInterval来检查页面上某些东西的位置。我遇到的问题是,如果我将它设置为10,100,250,它似乎非常慢并且向下滚动速度慢。

setInterval('functionName()', 10);
setInterval('functionName()', 100);
setInterval('functionName()', 250);

UPDATE:该功能的原因是当用户滚动时将元素向下移动。问题是它是一个iFrame中的Facebook应用程序,它比屏幕大。我似乎无法找到一种方法将iSrame外的onScroll属性附加到Facebook(或者你可以?!?我还没有运气)所以我被迫使用这种方法。基本上,它将获取Facebook传入的滚动高度并将元素向下移动。它的工作原理......但即使向下滚动它似乎也很慢。

这是我无法解决的问题吗?

5 个答案:

答案 0 :(得分:4)

你每隔10毫秒做一件事。这很可能会影响浏览器的正常运行。每当javascript运行时,浏览器界面都会被阻止。

也许如果您描述了您尝试使用间隔计时器并发布代码的内容,我们可以建议更好的方法来执行此操作。

答案 1 :(得分:2)

setInterval()setTimeout()的最小时间分辨率因浏览器而异,在某些情况下可能高达15或20毫秒(有些文章最长可达75毫秒)。您尝试以更高分辨率(更短的间隔)执行操作实际上更多是对浏览器的请求 - 不能保证。分辨率高于浏览器功能的请求将被“限制”,并且运行频率不低于该最小值。当然,如果浏览器的工作负载足够高(因为可能会给出连续调用函数的保证),则间隔可能会大得多。

作为旁注,最好不要将函数参数作为字符串提供给setInterval()。这样做将导致在全局范围内评估该功能。而不是:

setInterval('functionName()', 10);

你应该用这个:

setInterval(functionName, 10);

您应该经常重新考虑运行功能的必要性。也许这是一个以事件为导向的替代方案。

参考文献:MDN on minimum delay

答案 2 :(得分:0)

JavaScript本质上是单线程的。这意味着您的JavaScript在与浏览器UI相同的过程中运行。

因此,每当浏览器执行您的JavaScript时,它都必须暂停它正在做的事情(通常可能是在浏览器窗口中绘制页面),并运行您的代码。

由于您每秒运行一段代码100次(1000/10),您只是妨碍浏览器的正常操作形式!!

答案 3 :(得分:0)

我的猜测是functionName()很慢。 250对于现代浏览器来说不应该太糟糕。发布该功能,我们将看看我们是否可以改进它。

答案 4 :(得分:0)

没有提到的东西:当你真的应该传递函数对象时,你将字符串传递给setInterval

setInterval(myFunction, 5000)

当你给它一个像"functionName()"这样的字符串时,会发生什么呢?它是eval',这可能是某些缓慢的来源。