setImmediate()

在循环事件任务完成后马上运行指定代码
以前使用   setTimeout(fn, 0);
 
Since browsers clamp their timers to 4ms, it really doesn’t matter if you say 0, 1, 2, 3, or 4
计时器间隔至少为  4毫秒,所以事实上  setTimeout(fn, 0)  并不是立即运行的
 
而setImmediate()  则可以立即运行
 
只用 ie10 支持,Mozilla and WebKit  不感冒
 
 
如果是做动画应该使用 requestAnimationFrame()  代替 setImmediate(fn, 0),这是浏览器提供用于做动画的API,DOM-based样式改变,或者canvas,或者WebGL都可以使用
用settimeout最大的问题是屏幕显示更新的频率和settimeout定义的时间不同
浏览器会进行相关优化,例如当动画的循环在一个不可见的标签时,浏览器就不会一直让他运行,节省CPU,GPU和内存,也就可以省电了
(function() {
    var lastTime = 0;
    var vendors = ['ms', 'moz', 'webkit', 'o'];
    for(var x = 0; x < vendors.length && !window.requestAnimationFrame; ++x) {
        window.requestAnimationFrame = window[vendors[x]+'RequestAnimationFrame'];
        window.cancelAnimationFrame = window[vendors[x]+'CancelAnimationFrame'] 
                                   || window[vendors[x]+'CancelRequestAnimationFrame'];
    }
 
    if (!window.requestAnimationFrame)
        window.requestAnimationFrame = function(callback, element) {
            var currTime = new Date().getTime();
            var timeToCall = Math.max(0, 16 - (currTime - lastTime));
            var id = window.setTimeout(function() { callback(currTime + timeToCall); }, 
              timeToCall);
            lastTime = currTime + timeToCall;
            return id;
        };
 
    if (!window.cancelAnimationFrame)
        window.cancelAnimationFrame = function(id) {
            clearTimeout(id);
        };
}());
 
 

转载于:https://www.cnblogs.com/chuangweili/p/5162483.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值