博客逐步迁移到,独立博客,原文地址,http://www.woniubi.cn/js_hide_tab_setinterval/

我们一直都在说,JS的定时非常的不准确,但是很少有人去验证他,今天我就来验证一下。首先我们准备一个简单的例子。

简单例子

每隔一秒钟,然后输出离最开始的时间差距有多大。

 <script type="text/javascript">
var begin = (new Date()).getTime();
var i = 0;
setInterval(function(){
++i;
var now = (new Date()).getTime();
var intvals = ((now - begin)/1000).toFixed(3);
var str = "num:" + i + ";use time:" + intvals;
console.log(str);
},1000);
</script>

  

然后我们看一下输出结果。

看起来结果这没有什么呀,每次只是延时1ms而已,对于我来说,没有什么影响。

世界不可能永远都是平静的,当资源变成了稀缺,竞争加剧的时候,一切都不是那么美好了。

非活动Tab

非活动Tab,就是非当前Tab。浏览器有一种机制,就是优先保证当前Tab资源优先使用。我们可以换一种方式说。

活动Tab,相当于太子,其他的都是一些阿哥。如果太子吃肉,阿哥可以也干粮。太子连干粮也吃的话,阿哥们只能喝汤了,还是一些阿哥抢着喝汤。没办法,资源就是这么多,不是我不想给你。

这个例子也很简单,就是活动Tab干一件非常消耗CPU的事情,然后我们过一会去观察我们刚才的Tab。

for(var i = 0;i!=100000;++i){
console.log(i);
}

这次结果就不是那样简单了,看看,这是多么不靠谱的定时呀。

活动Tab

其实你也许说这不能反应问题,如果非活动页面如果做耗时CPU,活动页面定时一样不准?我就做了这么一个测试。结果是这样的

活动Tab就是不一般呀,延时只是稍微变慢了一点。

JS的定时到底有多不准的更多相关文章

  1. JS中new到底发生了什么

    outline prototype 与 __proto__ function 与 object new 到底发生了什么 prototype 与 __proto__ 首先说下在JS中比较容易让人困惑的  ...

  2. js的arguments到底是什么?

    类数组对象:arguments 总所周知,js是一门相当灵活的语言.当我们在js中在调用一个函数的时候,我们经常会给这个函数传递一些参数,js把传入到这个函数的全部参数存储在一个叫做arguments ...

  3. js 中this到底指向哪里?

    其实js的this指向很简单.我们记住下面3种情况. this 指向的是浏览器中的window.代码如下: function fn(){ this.name='yangkun'; this.age=2 ...

  4. js中‘0’到底是 true 还是 false

    if ('0') alert("'0' is true");  if ('0' == false) alert("'0' is false");结果是,两次都 ...

  5. JS 循环定时的一些思考

    网上也有例子, function doSetTimeout(i) { setTimeout(function() { console.log(i); }, 1000); } for (var i = ...

  6. 转自知乎大神----JS 的 new 到底是干什么的?

    大部分讲 new 的文章会从面向对象的思路讲起,但是我始终认为,在解释一个事物的时候,不应该引入另一个更复杂的事物. 今天我从「省代码」的角度来讲 new. --------------------- ...

  7. js实现定时调用的函数setInterval()

    setInterval是一个实现定时调用的函数,可按照指定的周期(以毫秒计)来调用函数或计算表达式.setInterval方法会不停地调用函数,直到 clearInterval被调用或窗口被关闭 定义 ...

  8. js手动定时清除localStorage

    <script type="text/javascript"> // 假设要保存变量 a 的值,过期时间为 3600秒 // 保存值 var obj = new Obj ...

  9. js设置定时执行

    具体语法参考:https://www.runoob.com/jsref/met-win-setinterval.html var timer = window.setInterval(function ...

随机推荐

  1. html之表单和简单CSS

    一.==表单== 1. form表单本身 <form name="myform" action="#" method="get"> ...

  2. linux中断和异常睡眠问题

    中断和异常: 中断只代表异步中断,异常代表同步中断,这样系统调用是异常处理,不是中断处理. 这里异常处理是可以休眠block的,因为异常处理所需的数据是存储在异常栈中,而每个进程都有一个异常栈,所以异 ...

  3. html5 语音识别 转

  4. fatal error C1859: “Release\IWBServer.pch”意外的预编译头错误,只需重新运行编译器就可能修复此问题

    解决方案 1.    创建预编译头(/Yc)   -- >     stdafx.cpp    使用预编译头(/Yu) 2.    complie 3.    使用预编译头(/Yu)    -- ...

  5. 商品录入功能v1.0【持续优化中...】

    # 录入商品 def goods_record(): print("欢迎使用铜锣辉的购物商城[商品管理][录入商品]".center(30, "*")) whi ...

  6. [Groovy] Private fields and methods are not private in groovy

    如题,, 具体介绍请参看: http://refaktor.blogspot.com/2012/07/private-fields-and-methods-are-not.html

  7. 2-28 switch

  8. JDBC常用套路

    1.连接数据库.使用查询功能 //1.获取数据库连接 Connection con=JDBCTools.getConnection(); String sql="select * from ...

  9. phpsotrm 设置命名空间

    PHPStorm 添加支持 PSR-4 命名空间前缀设置 许久没有更新博客啦, 太忙了, 七月这最后一天来写点自己在使用 PHPStorm 上的小却很有用的功能吧. PHPStorm 默认是使用 PS ...

  10. maven mirrorOf

    转载 http://blog.csdn.net/isea533/article/details/21560089 在maven中配置一个mirror时,mirror通常会设置成*,还有可能是一个具体的 ...