setTimeout()会影响性能

时间:2013-10-24 23:20:45

标签: javascript

我想知道这段代码是否会在客户端加载,因为超时时间太长了?

        //and update this again in a bit
        setTimeout(function() {
            updateWeather(lat,lng);
        }, 60000);

4 个答案:

答案 0 :(得分:5)

不仅仅是代码。系统闲置一分钟。只要updateWeather没有严重的性能问题并且间隔很短,setTimeout就不会是产品(我相信你的意思是setInterval,而不是setTimeout用于重复检查)

答案 1 :(得分:2)

您的问题的答案取决于:

  1. 您在
  2. 上执行此操作的设备
  3. 环境 - 执行此次的次数
  4. 独立的setTimeout不会伤害浏览器;但是,如果你反复做同样的事情,那就会有所作为。

    请查看以下网站以获取更多见解......

    http://ejohn.org/blog/analyzing-timer-performance/

答案 2 :(得分:2)

60秒计时器是由OS中的魔术实现的:它在等待的60秒内基本上不会增加​​CPU负载。

我猜updateWeather()正在轮询外部资源,所以问题的答案很简单,“不,很好”。 (由于天气不会经常改变 ,我会把它改为5分钟,请看下面关于电池寿命的评论。)(更好的是:看看天气数据提供商是否给你一个告诉你的字段当下次更新时,并使用基于此的setTimeout。)

在其他情况下,例如,如果您在60秒内收集了某种数据,然后一次性处理,这可能会导致负载高峰。用户可能会注意到这一点(例如,所有动画每60秒就会抖动一次)。在这种情况下,最好使用5秒计时器,并一次处理5秒钟的数据。

相反,如果您在移动设备上使用网络,则必须考虑电池寿命:唤醒和查找连接可能占主导地位。因此,将轮询时间从60秒延长到120秒可以使电池寿命延长一倍。 Ilya Grigorik在他的书“高性能浏览器网络”http://shop.oreilly.com/product/0636920028048.do中有一个很好的章节。 ......这是:http://chimera.labs.oreilly.com/books/1230000000545/ch08.html#ELIMINATE_POLLING

答案 3 :(得分:0)

除其他答案外,要记住的一件事是环境变量的关闭可能会对内存性能产生影响。如果您的setTimeout回调上方的作用域中的变量引用了万亿个对象,则只要这些回调处于排队状态,这些对象就会存在。从您发布的代码中我们无法分辨出这些信息,因此无法确定问题的答案。另外,如果您的setTimeout被多次调用,它将为每个循环创建一个闭包,从而有效地复制了环境并占用了堆空间。