如何正确使用服务器时间
在移动端的项目中需要实时更新本地时间戳,在移动项目切换到后台时,JS线程会主动挂起或线程阻塞,以结省内存开销,如果JS线程挂起或线程阻塞会引起定时器停止,直到JS线程重新激活;重新激活时,定时器是以线程挂机的时间点继续开始定时器,这个时间差会造成界面的实时时间与服务器时间显示不准确
应用范围
setTimeout
SetInterval
Web Workers
解决方案
Step1: 第一次发起AJAX时,通过获取AJAX response Head信息
//服务器时间
ServerTime=Response.headers.Date;
//本地时间
localTime=new Date();
//时差
diffTime=Math.abs(serverTime-localTime)
//显示的时间
showTimes=ServerTime;
启动定时器
Step2:
当项目由后台切换自前台JS线路激活 定时器激活会自动运行,可以由当前时间与本地时间MS差数与Step1中的时差比较,如果一致或者在差异化大小2S为正常,如果小于或大于则重新获取服务器时间
定时器中校验时间
//当前时间
currentTime=new Date();
newDiffTime=Math.abs(showTime-currentTime);
如果新的时差与当前的时差间隔,小于2S 则视为正常;如果大于2S则重新请求服务器时间,启动Step1;