我想知道这段代码是否会在客户端加载,因为超时时间太长了?
//and update this again in a bit
setTimeout(function() {
updateWeather(lat,lng);
}, 60000);
答案 0 :(得分:5)
不仅仅是代码。系统闲置一分钟。只要updateWeather没有严重的性能问题并且间隔很短,setTimeout就不会是产品(我相信你的意思是setInterval,而不是setTimeout用于重复检查)
答案 1 :(得分:2)
您的问题的答案取决于:
独立的setTimeout不会伤害浏览器;但是,如果你反复做同样的事情,那就会有所作为。
请查看以下网站以获取更多见解......
答案 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
被多次调用,它将为每个循环创建一个闭包,从而有效地复制了环境并占用了堆空间。