我想知道由于超时时间太长,这段代码是否会给客户端带来负载?
//and update this again in a bit
setTimeout(function() {
updateWeather(lat,lng);
}, 60000);
我想知道由于超时时间太长,这段代码是否会给客户端带来负载?
//and update this again in a bit
setTimeout(function() {
updateWeather(lat,lng);
}, 60000);
不仅仅是那个代码。系统空闲了那一分钟。只要 updateWeather 没有严重的性能问题并且间隔很短,setTimeout 就不会成为产品(我相信您的意思是 setInterval,而不是 setTimeout 用于重复检查)
60 秒计时器是在操作系统中通过魔术实现的:它在等待的 60 秒内基本上不会增加 CPU 负载。
我想updateWeather()
是轮询外部资源,所以你的问题的答案是一个简单的“不,没关系”。(由于天气不会经常变化,我会改为 5 分钟,请参阅下面关于电池寿命的评论。)(更好的是:看看天气数据提供商是否为您提供了一个字段,告诉您下一次更新的时间,并setTimeout
在此基础上使用 a 。)
在其他情况下,例如,如果您在这 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
您的问题的答案取决于:
独立的 setTimeout 不会伤害浏览器;但是,如果您重复做同样的事情,就会有所作为。
请查看以下网站以获取更多见解...
除了其他答案之外,要记住的一件事是范围内变量的关闭可能对内存性能产生的影响。如果回调上方范围内的变量引用了大量对象setTimeout
,那么只要回调排队,这些对象就可能存在。这不是我们可以从您发布的代码中看出的东西,因此无法明确回答您的问题。此外,如果您setTimeout
被多次调用,它将为每个创建一个闭包,从而有效地复制环境并占用您的堆空间。