专栏首页吴裕超遇见requestAnimationFrame

遇见requestAnimationFrame

今天,在读javascript异步编程的js事件深入理解部分的时候,了解到了requestAnimationFrame 这个api,在这里记录一下。

原文:

setTimeout 和 setInterval 就是些不精确的计时工具。在Node中,如果只是想产生一个短时延迟,请使用 process.nextTick。在 浏 览 器 端 , 请 尝 试 使 用 垫 片 技 术 (shim ) ③ : 在 支 持requestAnimationFrame 的 浏 览 器 中 , 推 荐 使 用requestAnimationFrame;在不支持 requestAnimationFrame 的 浏览器中,使用setTimeout 。

requestAnimationFrame 为html5新增api,支持情况可以参考https://developer.mozilla.org/zh-CN/docs/Web/API/Window/requestAnimationFrame

背景:

计时器一直是javascript动画的核心技术。而编写动画循环的关键是要知道延迟时间多长合适。一方面,循环间隔必须足够短,这样才能让不同的动画效果显得平滑流畅;另一方面,循环间隔还要足够长,这样才能确保浏览器有能力渲染产生的变化大多数电脑显示器的刷新频率是60Hz,大概相当于每秒钟重绘60次。大多数浏览器都会对重绘操作加以限制,不超过显示器的重绘频率,因为即使超过那个频率用户体验也不会有提升。因此,最平滑动画的最佳循环间隔是1000ms/60,约等于16.6ms而setTimeout和setInterval的问题是,它们都不精确。它们的内在运行机制决定了时间间隔参数实际上只是指定了把动画代码添加到浏览器UI线程队列中以等待执行的时间。如果队列前面已经加入了其他任务,那动画代码就要等前面的任务完成后再执行requestAnimationFrame采用系统时间间隔,保持最佳绘制效率,不会因为间隔时间过短,造成过度绘制,增加开销;也不会因为间隔时间太长,使用动画卡顿不流畅,让各种网页动画效果能够有一个统一的刷新机制,从而节省系统资源,提高系统性能,改善视觉效果

特点:

  【1】requestAnimationFrame会把每一帧中的所有DOM操作集中起来,在一次重绘或回流中就完成,并且重绘或回流的时间间隔紧紧跟随浏览器的刷新频率

  【2】在隐藏或不可见的元素中,requestAnimationFrame将不会进行重绘或回流,这当然就意味着更少的CPU、GPU和内存使用量

  【3】requestAnimationFrame是由浏览器专门为动画提供的API,在运行时浏览器会自动优化方法的调用,并且如果页面不是激活状态下的话,动画会自动暂停,有效节省了CPU开销

使用:

window.requestAnimationFrame() 方法告诉浏览器您希望执行动画并请求浏览器在下一次重绘之前调用指定的函数来更新动画。该方法使用一个回调函数作为参数,这个回调函数会在浏览器重绘之前调用

参考文章

https://www.cnblogs.com/xiaohuochai/p/5777186.html

http://web.jobbole.com/91578/

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 原创插件:WordPress博客友好对话框+文章随机推荐滚动条插件(附代码版)

    双 11 光棍节,我在博客发布了一篇给博客部署一个友好对话框的教程,用了几天感觉非常不错!就进一步折腾了一下,目前这个 js 已实现以下多种功能: 一、功能描述...

    张戈
  • 利用JS生成二维码图片,优化WEB性能及页面加载速度

    移动互联网的蓬勃发展绝对离不开二维码的“推波助澜”,一张小小的图片,省去了繁琐的苦逼输入,也拉近了 PC 端和移动端的距离!虽然是东洋人最初发明的,但我还是要给...

    张戈
  • 如何用JavaScript进行数组去重

    今天的文章和大家谈一谈如何用JavaScript进行数组去重,这是一道常见的面试(笔试)题,可以很好地考察出一个人的逻辑思维及边界考虑情况,希望此文能够帮助大家...

    个推君
  • React 移动 web 极致优化

    image.png 引言 最近一个季度,我们都在为手Q家校群做重构优化,将原有那套问题不断的框架换掉。经过一些斟酌,决定使用react 进行重构。 选择reac...

    腾讯Bugly
  • 控制流程完整性:给大家介绍一种“另类”的Javascript反分析技术

    写在前面的话 理解恶意软件的真实代码对恶意软件分析人员来说是非常有优势的,因为这样才能够真正了解恶意软件所要做的事情。但不幸的是,我们并不总是能够得到“真实”的...

    FB客服
  • 杯子倒水问题自动求解程序(Javascript实现)

    智力测试题经常遇到类似的逻辑题,给几个容量不等的杯子,让你倒出多少的水。 安卓上有一款专门玩这个题的游戏叫做Water Logic. ? 我安装这个游戏把几十个...

    李海彬
  • 关于移动 App H5 页面里的 JavaScript 异常捕获

    自 HTML5 标准正式发布之后,其得天独厚的跨平台特性吸引了众多开发者的目光。 伴随着 HTML5 的发展,JavaScript 的重要性也在逐步增加,要说现...

    腾讯Bugly
  • JS+CSS让网站嗨起来,博客要被玩坏了!

    最开始在陌小雨那就看到了这个功能,觉得挺好玩,但是也没想继续深入。昨天在无主题博客看到他分享了这个功能的代码之后,觉得可以试试。 用了之后,发现他改进之后的代码...

    张戈
  • JS代码实现浏览器网页标题的动态切换,略微提高网站粘性

    前几天在微饭天空看到一个让我眼前一亮的分享,自己拿过来用了几天之后,感觉挺有意思,现在我略微改进一下并分享出来,方便更多人自定义成自己喜欢的内容。 ? 一、原...

    张戈
  • 利用placeholder属性来添加输入框默认文字提示,提高用户体验

    这个是我老早就在用的方法,本不打算分享,因为网上随便都能搜得到,感觉没有分享的必要。鉴于中国博客联盟有朋友问到了这问题,所以还是简单的整理下,希望能帮到部分不了...

    张戈

扫码关注云+社区

领取腾讯云代金券