处理定时器不准误差

604 阅读1分钟
let count = count2 = 0;
let runTime,runTime2;
let startTime,startTime2 = performance.now();//获取当前时间

//普通任务-对比
setInterval(function(){
    runTime2 = performance.now();
    ++count2;
    console.log("普通任务",count2 + ' --- 延时:' + (runTime2 - (startTime2 + count2 * 1000)) + ' 毫秒');
}, 1000);

//动态计算时长
function func(){
    runTime = performance.now();
    ++count;
    let time = (runTime - (startTime + count * 1000));
    console.log("优化任务",count + ' --- 延时:' + time +' 毫秒');
    //动态修正定时时间
    setTimeout(func,1000 - time);
}
startTime = performance.now();
setTimeout(func , 1000);

//耗时任务
setInterval(function(){
    let i = 0;
    console.log("风格先-------");
    while(++i < 100000000);
}, 0);

// 随着耗时任务越来耗时越来越长,误差弥补的效果也越来越明显.
//  注意  :  只能是弥补误差,尽量使误差小,做不到完全不误差