setTimeout(0) 即将退役
相信所有做前端开发的同学都会经常使用 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) 即将退役相关推荐
- 拼多多回应六万人砍价不成功:不实;苹果回应iOS 15.4正式版续航翻车;AMD FSR 2.0 即将面世|极客头条
「极客头条」-- 技术人员的新闻圈! CSDN 的读者朋友们早上好哇,「极客头条」来啦,快来看今天都有哪些值得我们技术人关注的重要新闻吧. 整理 | 梦依丹 出品 | CSDN(ID:CSDNnews ...
- 一周焦点 | 陆奇“入驻” YC;TensorFlow 2.0 即将发布
▌业界焦点 陆奇"入驻" YC,开启新征程 8 月 15 日,据 36 氪消息,Y Combinator(以下简称 YC)宣布中国作为美国市场外展开业务的首个国家,同时,宣 ...
- 重磅 | TensorFlow 2.0即将发布,所有tf.contrib将被弃用
作者 | 阿司匹林 出品 | AI科技大本营(公众号ID:rgznai100) 上周,谷歌刚刚发布了 TensorFlow 1.10.0 版本(详见<TensorFlow 版本 1.10.0 发 ...
- javascript真的是异步的吗?且看setTimeout的实现原理以及setTimeout(0)的使用场景
在今天之前我一直以为setTimeout这个函数是异步的,无意中看到了一篇关于setTimeout的文章.发现自己曾经的认识全是错误的,赶紧总结下. 先看一段代码: var start = new D ...
- .NET Core 3.0 即将结束生命周期,建议迁移 3.1
.NET Core 官方发布博客,说明 .NET Core 3.0 即将结束生命周期,建议开发者迁移到 3.1 版本. .NET Core 3.0 于 2019 年 12 月 3 日发布,这是一个 C ...
- 振作起来– Spring Framework 4.0即将来临!
几天前,SpringSource 宣布流行的Spring框架的4.0版本正在开发中. 下一个迭代将是Spring Framework 4.0! 如SpringSource所言,即将发布的版本的重点是& ...
- Compose 1.0 即将发布,你准备好了吗?
作者 | fundroid 责编 | 欧阳姝黎 Compose 于2019年的Google IO大会首次发布,当时感觉前景并不乐观,想推翻已存在10年之久的现有视图体系谈何容易,更何况将来 ...
- 支付宝推生物识别;Google 爆重大隐私问题;TensorFlow 2.0 即将发布 | 极客头条
「CSDN 极客头条」,是从 CSDN 网站延伸至官方微信公众号的特别栏目,专注于一天业界事报道.风里雨里,我们将每天为朋友们,播报最新鲜有料的新闻资讯,让所有技术人,时刻紧跟业界潮流. 快讯速知 支 ...
- 华为升级emui10是鸿蒙系统吗,华为鸿蒙正式发布,EMUI10.0即将登场,你需要这份升级名单吗?...
华为手机在我们的心目中是民族品牌,能够自行研发处理器芯片.手机操作系统.我们所知道EMUI.MIUI.Flyme等,都是基于安卓系统的,今天要给花粉带来喜讯,华为EMUI10.0即将登场. 一.鸿蒙系 ...
最新文章
- Ice “Hello World”的实现
- JSP完全自学手册图文教程
- python操作memcahed
- java获取当前时间星期几_java怎么获取当前日期是星期几
- 金九银十专供 | 175 道 Go 工程师必考面试题 + 详细解答
- 为iPhone 12上市做准备,台积电月底前投产A14 Bionic芯片
- centos6mysql配置_笔记:centos6 mysql配置测试
- mac远程redis_「实战篇」开源项目docker化运维部署-redis高速缓存(六)
- OpenShift 4 Hands-on Lab (4) - 用ImageStream操作Image
- mysql 代码结构_MySQL代码执行结构
- 接口和一些抽象类的区别
- Python内置函数(10)——float
- xmpp服务器linux,Prosody搭建xmpp服务器
- 独家研究 I 某新一线城市中高端养老社区项目(CCRC)入住客户画像深度洞察研究报告
- Istio 东西向流量管理
- Grub4dos安装和启动完全指南
- 文件服务器迁移方法,文件服务器迁移工具
- include“ “和include<>区别
- HPUX系统启动后主机名为unknown的解决办法
- 数据加载、存储与文件格式(python)
热门文章
- python用类名直接调用方法_Python类的实例方法、静态方法、类方法详解,附代码示例...
- java1.7环境,jdk1.7编译环境
- java comp env 区别_加和不加java:comp/env/前缀有什么区别?
- 使用docker搭建gitlab服务器
- ubuntu 退出anaconda环境_ubuntu 安装两个Anaconda,并迁移虚拟环境
- NTP客户端通过脚本一键配置
- zoj3988 二分图匹配
- hadoop SecondNamenode 详解
- springmvc+mybatis+mysql+maven
- webService初探