相信所有做前端开发的同学都会经常使用 setTimeout(0) 来做很多事情,这个一度成为解决了很多前端疑难杂症的法宝。而且大家也知道 setTImeout(0) 的极限在16ms左右。也许很多人没想到这个是一个很严重的问题,但是在w3c性能小组的专家眼里这是一个非常纠结的设置。

那setTimeout和16ms会带来什么问题呢?

1. 我们都知道,我们在做页面动画的时候大多数都是在用setTImeout来控制每一帧的动画的, 而多个setTimeout的存在会导致很多次CPU中断调度的开销,为了减少这些开销,我们希望同一个统一的CPU中断调度管理调度单元来管理所有动画,

于是就出现了 requestAnimationFrame。 requestAnimationFrame 的出现不仅仅可以解决中断调度的问题,还可以更加优化得统一管理动画单元里dom元素的repaint方式。

2. 杯具的16ms,在早期。js的callback执行,是依赖CPU的中断来进行控制的,如果两个中断之间时间太短会导致,CPU性能消耗很高,同时影响能耗,于是微软和英特公司为了解决这个问题,就约定每个中断之间的间隔是15.6ms(64 fps)所以就是我们常见的约等于16ms的间隔。不过随着web的要求不断增加,大家对这个要求希望是放宽的态度,于是在高端浏览器,这个性能被提升了4倍左右,所以在chrome,ie10等浏览器,setTimeout的间隔缩短到了 4ms (250 fps)。 但是问题来了,这么高的消耗以传统的方式,并不能从根本上解决CPU的调度问题,而且能耗也会提升40%

于是W3C,提出需要取代 setTimeout(0) 的代替品 --- setImmediate

不过到底底层如何解决了这个CPU调度,还能保证脚本能够很快执行,这块舜子还在研究,了解的朋友也欢迎一起交流哈。

这是两个非常好的方法用来取代setTimeout的api,舜子也做了一些小小的实验来验证 requestAnimationFrame,setImmediate 和 setTimeout 之间的执行效率区别,在IE10下可以看到,setImmediate 接口的callback次数可以达到每秒 6000 次的的执行。而requestAnimationFrame主要目的是为了保证动画的圆滑播放,所以基本上是控制在60 fps的范围,而且根据文档介绍,只是一个时钟控制器在进行调度,而且会更加需要来进行按需渲染。

http://www.pjhome.net/web/html5/timing_test.htm

setTimeout(0) 即将退役相关推荐

  1. 拼多多回应六万人砍价不成功:不实;苹果回应iOS 15.4正式版续航翻车;AMD FSR 2.0 即将面世|极客头条

    「极客头条」-- 技术人员的新闻圈! CSDN 的读者朋友们早上好哇,「极客头条」来啦,快来看今天都有哪些值得我们技术人关注的重要新闻吧. 整理 | 梦依丹 出品 | CSDN(ID:CSDNnews ...

  2. 一周焦点 | 陆奇“入驻” YC;TensorFlow 2.0 即将发布

    ▌业界焦点 陆奇"入驻" YC,开启新征程  8 月 15 日,据 36 氪消息,Y Combinator(以下简称 YC)宣布中国作为美国市场外展开业务的首个国家,同时,宣 ...

  3. 重磅 | TensorFlow 2.0即将发布,所有tf.contrib将被弃用

    作者 | 阿司匹林 出品 | AI科技大本营(公众号ID:rgznai100) 上周,谷歌刚刚发布了 TensorFlow 1.10.0 版本(详见<TensorFlow 版本 1.10.0 发 ...

  4. javascript真的是异步的吗?且看setTimeout的实现原理以及setTimeout(0)的使用场景

    在今天之前我一直以为setTimeout这个函数是异步的,无意中看到了一篇关于setTimeout的文章.发现自己曾经的认识全是错误的,赶紧总结下. 先看一段代码: var start = new D ...

  5. .NET Core 3.0 即将结束生命周期,建议迁移 3.1

    .NET Core 官方发布博客,说明 .NET Core 3.0 即将结束生命周期,建议开发者迁移到 3.1 版本. .NET Core 3.0 于 2019 年 12 月 3 日发布,这是一个 C ...

  6. 振作起来– Spring Framework 4.0即将来临!

    几天前,SpringSource 宣布流行的Spring框架的4.0版本正在开发中. 下一个迭代将是Spring Framework 4.0! 如SpringSource所言,即将发布的版本的重点是& ...

  7. Compose 1.0 即将发布,你准备好了吗?

    作者 | fundroid       责编 | 欧阳姝黎 Compose 于2019年的Google IO大会首次发布,当时感觉前景并不乐观,想推翻已存在10年之久的现有视图体系谈何容易,更何况将来 ...

  8. 支付宝推生物识别;Google 爆重大隐私问题;TensorFlow 2.0 即将发布 | 极客头条

    「CSDN 极客头条」,是从 CSDN 网站延伸至官方微信公众号的特别栏目,专注于一天业界事报道.风里雨里,我们将每天为朋友们,播报最新鲜有料的新闻资讯,让所有技术人,时刻紧跟业界潮流. 快讯速知 支 ...

  9. 华为升级emui10是鸿蒙系统吗,华为鸿蒙正式发布,EMUI10.0即将登场,你需要这份升级名单吗?...

    华为手机在我们的心目中是民族品牌,能够自行研发处理器芯片.手机操作系统.我们所知道EMUI.MIUI.Flyme等,都是基于安卓系统的,今天要给花粉带来喜讯,华为EMUI10.0即将登场. 一.鸿蒙系 ...

最新文章

  1. Ice “Hello World”的实现
  2. JSP完全自学手册图文教程
  3. python操作memcahed
  4. java获取当前时间星期几_java怎么获取当前日期是星期几
  5. 金九银十专供 | 175 道 Go 工程师必考面试题 + 详细解答
  6. 为iPhone 12上市做准备,台积电月底前投产A14 Bionic芯片
  7. centos6mysql配置_笔记:centos6 mysql配置测试
  8. mac远程redis_「实战篇」开源项目docker化运维部署-redis高速缓存(六)
  9. OpenShift 4 Hands-on Lab (4) - 用ImageStream操作Image
  10. mysql 代码结构_MySQL代码执行结构
  11. 接口和一些抽象类的区别
  12. Python内置函数(10)——float
  13. xmpp服务器linux,Prosody搭建xmpp服务器
  14. 独家研究 I 某新一线城市中高端养老社区项目(CCRC)入住客户画像深度洞察研究报告
  15. Istio 东西向流量管理
  16. Grub4dos安装和启动完全指南
  17. 文件服务器迁移方法,文件服务器迁移工具
  18. include“ “和include<>区别
  19. HPUX系统启动后主机名为unknown的解决办法
  20. 数据加载、存储与文件格式(python)

热门文章

  1. python用类名直接调用方法_Python类的实例方法、静态方法、类方法详解,附代码示例...
  2. java1.7环境,jdk1.7编译环境
  3. java comp env 区别_加和不加java:comp/env/前缀有什么区别?
  4. 使用docker搭建gitlab服务器
  5. ubuntu 退出anaconda环境_ubuntu 安装两个Anaconda,并迁移虚拟环境
  6. NTP客户端通过脚本一键配置
  7. zoj3988 二分图匹配
  8. hadoop SecondNamenode 详解
  9. springmvc+mybatis+mysql+maven
  10. webService初探