set超时,超时时间较短,超时时间较长
setTimeout with shorter timeout vs longer timeout
我试图争论这是否是处理Javascript中计时器的好方法。 我正在使用Angular,但这个概念与使用setTimeout
而不是Angular提供$timeout
功能相同。
旧方法:
$scope.timer=$scope.doTiming();
$scope.timeRemaining=30; //30 second timer;
$scope.doTiming=function(){
return $timeout(function(){
$scope.timeRemaining=$scope.timeRemaining-1;
if($scope.timeRemaining<=0){
$scope.disabledEntry=true;
$scope.submitData();
}else{
$scope.timer=$scope.doTiming();
}
},1000);
};
30 计时器上经过的时间:30.050 seconds
新方法:
var startTime=new Date().getTime, delta; //new: get current time
$scope.timeRemaining=30;
$scope.timer=$scope.doTiming();
$scope.doTiming=function(){
return $timeout(function(){
delta=(new Date().getTime())-startTime; //new: get delta from start time
$scope.timeRemaining=$scope.timeRemaining-(delta/1000); //new: subtract by delta
if($scope.timeRemaining<=0){
$scope.disabledEntry=true;
$scope.submitData();
}else{
$scope.timer=$scope.doTiming();
}
},1);
};
30 计时器上经过的时间:30.002 seconds
主要区别在于旧方法每秒循环一次,并滴答计时器。 新方法不断非常快速地循环,并从一开始就根据时间的变化来测量时间,因此它有可能更准确。 我想知道这是否合理? 这种类型的即时循环会导致旧计算机上出现问题吗? 我是否应该使用计时器为 100 而不是 1 的新方法? 思潮?
编辑
由于与超时减慢有关的原因,新方法对我来说更可取: Chrome:后台选项卡中暂停的超时/间隔?
在我看来,你应该做尽可能多的"超时",但尽可能少。换句话说,如果您需要每秒更新一次计时器,请每秒触发一次超时。没有人能够注意到计时器更新中的 50 毫秒延迟(也没有人在乎),所以我认为不值得用额外的 JavaScript 周期来打扰浏览器,例如。可能最好花在更新一些动画上。
我想不出为什么这不适用于增量时间方法的原因。最坏的情况是,选项卡在触发一秒超时后立即进入后台。当用户返回到选项卡时,大约需要一秒钟才能刷新计时器,在该时间间隔内,用户仍将看到他使选项卡处于非活动状态时的计时器值。如果这对于您的用例来说是可以接受的,我根本不会担心增加间隔:)
相关文章:
- 如何设置$.ajax请求的超时,并在超时时间过长时进行重做
- jasmine 2-在jasmine指定的超时时间内未调用异步回调.DEFAULT_TIMEOUT_INTERVAL
- set超时,超时时间较短,超时时间较长
- 设置函数的超时时间
- 在警报框上设置超时时间
- 设置最小时间和超时时间
- 摩卡,超过2000ms的超时时间.确保在这个测试中调用了done()回调
- 设置屏保超时时间
- For循环在超时时间内具有动态数字
- 反复调用一个函数,直到它的承诺被解决,或者直到设置的超时时间过去
- 设置加载apache的超时时间
- 我无法在Selenium独立上编辑超时时间
- 在Node.js中设置HTTP超时时间
- 当XMLHttpRequest处于“pending”状态时;状态(在Chrome中)是否将该时间计入它的超时时间
- 如何设置浏览器创建的桌面通知的关闭超时时间?
- 在Div背景中加载图像时设置超时时间
- 设置ondrop函数的超时时间
- Jquery在弹出窗口设置超时时间
- 设置超时时间打开2个窗口
- 使用catch in promise进行断言超过超时时间