文章目录

  • 主要问题:如何保证倒计时以服务器时间为准?
  • 方案1:每次倒计时去服务端请求时间
  • 方案2:从服务端返回以服务器时间为基准的倒计时时间戳
  • 方案3:入口js请求接口获取本地时间与服务器时间的差值
  • 总结

关于倒计时的一些探讨

最近项目中有应用到倒计时,其中出现了一些问题和问题的解决方案,觉得蛮有分享价值,于是决定写篇文章记录一下。

主要问题:如何保证倒计时以服务器时间为准?

这是很普遍的问题,虽然后端可以做校验,但是难免本地时间会和服务器时间存在偏差,导致用户体验并不友好。(明明本地时间已经是倒计时结束了,可是还是无法正常展示该展示的功能)

对于这个问题,我们该选用setTimeout+循环的形式还是setInterval。个人认为还是使用setInterval更加符合我们的业务逻辑。

方案1:每次倒计时去服务端请求时间

code:

var myInterval = setInterval(function(){
//执行请求 获取当前服务端时间 并进行相应操作
},1000)

这个方案对于稍微有点经验的开发人员来说,都知道是不可取的。因为这会给服务器造成无法想象的压力,导致应用崩溃。比如我在这个页面停留一分钟,那么请求就发送了60次,假如此时有100个人在访问这个页面,那么一分钟就有6000条请求,人数如果再增长,这绝对会造成不必要的服务器压力。并且这个方案的倒计时,也会存在很大的误差,因为请求存在延迟,跟你的网络状态也有很大的关系。

方案2:从服务端返回以服务器时间为基准的倒计时时间戳

code:

//假设请求获取到一个时间戳 TIMEDIFF var myInterval = setInterval(function(){TIMEDIFF--;//执行页面倒计时的渲染
},1000)

优点:

  • 一个页面只请求一次
  • 本地修改时间也无法更改倒计时

缺点:

  • js自带的计时器并不是百分百准确依据所指定的时间,进行定时工作,影响其准确度的情况有很多,假如页面一直打开,那么与实际的偏差量会越来越大。

改进版

//假设请求获取到一个时间戳 TIMEDIFF
var endTime = Date.now()+TIMEDIFF;//以本地时间为基准获得一个结束时间 var myInterval = setInterval(function(){ var countDown = endTime - Date.now() //每秒会获取本地时间,这样就算执行的周期不准确 //也可以准确的获取时间差 //执行页面倒计时的渲染 },1000)

方案3:入口js请求接口获取本地时间与服务器时间的差值

//entry.js入口文件

...
if(!window.dateDiff){//初始化时window.dateDiff=0;js中0为false,非零为true
$.get('api/GetTimeDiff', {nowDate:Date.now()},function(dateDiff){ window.dateDiff = dateDiff; //将时间差存在全局变量中,方便在其他模块中调用 }) } ... //other.js 其他模块 ... var myInterval = setInterval(function(){ var countDown = endTime - Date.now()+dateDiff; //每秒会获取本地时间,这样就算执行的周期不准确 //也可以准确的获取时间差 //执行页面倒计时的渲染 },1000) ...

优点:

  • 入口文件获取请求,使该请求只在页面生命周期中请求一次
  • 准确度高,就算页面打开很久还是保持高准确度

缺点:

  • 由于每秒获取当前时间,假如有人刻意在倒计时时期内,修改了时间将会导致倒计时异常。

总结

当然,解决方案肯定不只以上几种,欢迎有想法的同学补充。对比以上三个方案,第一个不可行,第二和第三本质上是类似的东西,只是第三种方案将差值从模块中抽离出来,并且调用次数也降低了很多,个人会比较喜欢第三种方案。此文章会持续保持更新状态,有想法,有问题的同学都可以联系我!!

引:http://www.cnblogs.com/cydiacen/p/6287538.html

转载于:https://www.cnblogs.com/SimonHu1993/p/9225308.html

服务器与本地时间的倒计时相关推荐

  1. js网站服务器时间,js获取本地时间、服务器时间、记时

    js获取本地时间.服务器时间.倒计时 untitled get=function (id){return document.getElementById(id)} if(document.all){ ...

  2. 网站倒计时使用服务器时间,根据服务器时间校准倒计时时间

    最近项目做一个答题活动, 需要所有用户统一时间并开始答题, 为了防止每个用户的时间不一样,所以需要从网络上获取时间,以此来校准 data() { return { countDownList: '00 ...

  3. html页面获取服务器时间,[html]定时获取服务器时间和本地时间

    [html]定时获取服务器时间和本地时间 2018-11-1 萧 写技术 .time_div{width:100%; padding:10px; text-align:center; margin:5 ...

  4. Win11本地时间与服务器时间不符怎么解决?

    近期有部分Win11用户在电脑的使用中,发现电脑服务器时间和本地时间经常对不上,那么我们应该如何解决呢?Win11本地时间与服务器时间不符怎么解决?下面看看解决方法,希望对你有所帮助哦. 雨林木风 G ...

  5. 怎么网络同步计算机的本地时间,VBA实现本地计算机时间与网服务器时间的同步...

    时 间:2018-04-04 18:56:17 作 者:摘 要:    VBA实现本地计算机时间与网服务器时间的同步. 正 文: 电脑时间走时不准是出了名的.它一般是以廉价的振荡电路或石英钟为基础,每 ...

  6. 配置本地时间服务器(集群)

    在集群测试过程中,一般都需要配置集群内各节点时间同步.因此就需要配置一个本地时间服务器,其他节点作为客户端来同步时间. NTP在linux下有两种时钟同步方式,分别为直接同步和平滑同步: 直接同步 使 ...

  7. sql服务器时间不正确,SQL Server 服务器本地时间更改对SQL Server本身的影响

    你好, 针对你的问题,进行了一些测试供你参考: 1.日志文件编写或日志序列号混乱 LSN跟时间没有关系,改变时间后,LSN也没有出现混乱现象,关于LSN,你可以查看SQL Server 事务日志体系结 ...

  8. php 自动选择时间的代码,使用JavaScript或PHP自动检测用户当前的本地时间

    我经常需要显示基于或受到用户实际本地时间影响的信息,这些时间在不同的时区有所不同.是否有可靠的方式获取用户当前时间和/或时区? 关键的问题: >服务器端代码是基于网站主机或用户的ISP > ...

  9. IBM服务器以及本地PC机安装suse linux,oracle测试,遇到的问题有:

    <!-- /* Font Definitions */ @font-face {font-family:宋体; panose-1:2 1 6 0 3 1 1 1 1 1; mso-font-al ...

最新文章

  1. Android Studio 在项目中引用第三方jar包
  2. Android实现导航菜单左右滑动效果
  3. Python全栈 进阶(进阶内容都在这了)
  4. socket PF_INET AF_INET 区别
  5. Leetcode 104. 二叉树的最大深度 解题思路及C++实现
  6. android 不同型号的终端的UI适配--一种解决方法
  7. Spring框架学习笔记11:基于Java配置方式SSM框架西蒙购物网
  8. 张大奕网店关联公司被行政处罚:因以不合格产品冒充合格产品
  9. 通过 powershell 配置 IIS
  10. python在线编辑器可视化_python软件——wxpython可视化编辑器 v4.1附使用教程
  11. 五分钟学会python函数_五分钟带你搞懂python 迭代器与生成器
  12. 对勾函数_这16个Excel函数,帮你完成80%的数据统计工作
  13. 学术论文写作规范性的要点-I 中文学术论文写作规划
  14. TQ210 —— LCD
  15. 霍普金斯计算机专业研究生如何,约翰·霍普金斯大学电气和计算机工程硕士研究生...
  16. 11、异常 异常解决方案
  17. MetaAI的融合怪:BlenderBot
  18. ubuntu18.04下载地址
  19. 计算机切换管理员用户,切换为Administrator,完全掌握电脑
  20. Java项目:医院电子病历管理系统(java+Servlet+JSP+Easyui+Mysql)

热门文章

  1. 关于软件工程课程的期望
  2. 十二个任务 分给三个线程处理
  3. Eclipse中新建WEB项目,JSP页面报错。
  4. SQL Server 索引结构及其使用(二)
  5. MATLAB2013a的license过期的解决办法
  6. ubuntu和windows实现互相之间远程控制
  7. 自编码之残差和磁力线网络结构
  8. python 实时显示声音
  9. Java反射机制及API使用
  10. **PHP foreach 如何判断为数组最后一个最高效?