前言

JavaScript提供定时执行代码的功能,叫做定时器(timer),主要由setTimeout()和setInterval()这两个函数来完成。而这篇文中主要给大家介绍的是关于JS中setTimeout和setInterval最大延时值的相关问题,需要的朋友们下面来一起学习学习吧。
先来看这样一段代码:
function update() {
loadData().then(function(data) {
$('#content').html(data.content);
var delay = data.nextUpdateTime - new Date();
if (delay > 0) {
setTimeout(update, delay);
}
});
}
其流程非常简单:通过AJAX加载数据后更新HTML的内容;如果有指定下次更新时间,则通过计时器在该时间点再执行一次整个流程。
要说这段代码有什么隐患的话,那就是data.nextUpdateTime与当前时间的时间差(即delay变量的值)比较小的时候,会导致内容频繁更新。但这是属于正常的业务逻辑,要优化就只能牺牲内容更新的即时性。然而这里我要说的是,当时间差非常大的时候,也会出现同样的问题。
下面模拟一下这个场景:
function log() {
console.log('executed');
}
var nextUpdateTime = new Date();
// 设为一个月后
nextUpdateTime.setMonth(nextUpdateTime.getMonth() + 1);
var delay = nextUpdateTime - new Date();
setTimeout(log, delay);
这段代码的原意是让log函数在一个月后执行,但是运行一下就可以发现,该函数会马上执行。为什么会这样呢?
搜一下相关内容可以发现,setTimeout是使用Int32来存储延时参数值的,也就是说最大的延时值是2^31-1。一旦超过了最大值,其效果就跟延时值为0的情况一样,也就是马上执行。
这个最大的延时值已经接近一个月了,一般情况下,用户也不会长时间开着一个网页,如果真开了这么久,那就刷新一下吧:
function update() {
loadData().then(function(data) {
$('#content').html(data.content);
var delay = data.nextUpdateTime - new Date();
if (delay > 0) {
// 限制最大延时值为一天
var ONE_DAY = 24 * 60 * 60 * 1000;
if (delay > ONE_DAY) {
setTimeout(function() {
window.location.reload();
}, ONE_DAY);
} else {
setTimeout(update, delay);
}
}
});
}
同样的问题也存在于setInterval中。这也算是Javascript中一个比较隐蔽的坑了。
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流。
# setinterval延时
# settimeout延时
# js定时器setinterval
# 实例详解JavaScript中setTimeout函数的执行顺序
# JS ES6中setTimeout函数的执行上下文示例
# JS中SetTimeout和SetInterval使用初探
# js中setTimeout的妙用--防止循环超时
# JavaScript中从setTimeout与setInterval到AJAX异步
# JavaScript计时器用法分析【setTimeout和clearTimeout】
# 详解JS中定时器setInterval和setTImeout的this指向问题
# JavaScript setTimeout与setTimeinterval使用案例详解
# 的是
# 这段
# 值为
# 这是
# 有什么
# 也不
# 更新时间
# 也会
# 相关内容
# 那就
# 设为
# 开了
# 计时器
# 这也
# 这两个
# 朋友们
# 一个月后
# 给大家
# 这篇文章
# 这篇
相关文章:
如何在西部数码注册域名并快速搭建网站?
建站OpenVZ教程与优化策略:配置指南与性能提升
成都网站制作公司哪家好,四川省职工服务网是做什么用?
如何快速搭建虚拟主机网站?新手必看指南
微信小程序 五星评分(包括半颗星评分)实例代码
网站制作价目表怎么做,珍爱网婚介费用多少?
北京网站制作网页,网站升级改版需要多久?
建站之星手机一键生成:多端自适应+小程序开发快速建站指南
如何通过虚拟主机快速完成网站搭建?
如何通过FTP服务器快速搭建网站?
如何在IIS服务器上快速部署高效网站?
惠州网站建设制作推广,惠州市华视达文化传媒有限公司怎么样?
如何使用Golang安装API文档生成工具_快速生成接口文档
如何在IIS7上新建站点并设置安全权限?
如何选择服务器才能高效搭建专属网站?
大学网站设计制作软件有哪些,如何将网站制作成自己app?
如何在Golang中使用encoding/gob序列化对象_存储和传输数据
哪家制作企业网站好,开办像阿里巴巴那样的网络公司和网站要怎么做?
Java解压缩zip - 解压缩多个文件或文件夹实例
深圳防火门网站制作公司,深圳中天明防火门怎么编码?
建站之家VIP精选网站模板与SEO优化教程整合指南
道歉网站制作流程,世纪佳缘致歉小吴事件,相亲网站身份信息伪造该如何稽查?
建站之星备案流程有哪些注意事项?
网站制作免费,什么网站能看正片电影?
佛山网站制作系统,佛山企业变更地址网上办理步骤?
视频网站app制作软件,有什么好的视频聊天网站或者软件?
如何快速搭建二级域名独立网站?
安徽网站建设与外贸建站服务专业定制方案
头像制作网站在线制作软件,dw网页背景图像怎么设置?
网站插件制作软件免费下载,网页视频怎么下到本地插件?
如何在景安云服务器上绑定域名并配置虚拟主机?
北京网站制作公司哪家好一点,北京租房网站有哪些?
企业网站制作公司网页,推荐几家专业的天津网站制作公司?
如何快速上传建站程序避免常见错误?
湖北网站制作公司有哪些,湖北清能集团官网?
建站之星微信建站一键生成小程序+多端营销系统
最好的网站制作公司,网购哪个网站口碑最好,推荐几个?谢谢?
高防服务器如何保障网站安全无虞?
如何快速生成凡客建站的专业级图册?
如何通过服务器快速搭建网站?完整步骤解析
建站主机助手选型指南:2025年热门推荐与高效部署技巧
如何在Golang中处理模块冲突_解决依赖版本不兼容问题
巅云智能建站系统:可视化拖拽+多端适配+免费模板一键生成
如何在云指建站中生成FTP站点?
如何在云服务器上快速搭建个人网站?
赚钱网站制作软件,建一个网站怎样才能赚钱?是如何盈利的?
建站之星图片链接生成指南:自助建站与智能设计教程
三星网站视频制作教程下载,三星w23网页如何全屏?
西安制作网站公司有哪些,西安货运司机用的最多的app或者网站是什么?
可靠的网站设计制作软件,做网站设计需要什么样的电脑配置?
*请认真填写需求信息,我们会在24小时内与您取得联系。