全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

JS中setTimeout和setInterval的最大延时值详解

前言

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小时内与您取得联系。