当前位置: 首页 > news >正文

raf节流

目录

  • 定时器节流
  • Raf节流
    • 介绍requestAnimationFrame
    • 使用raf节流
    • 注意点
  • 对比

定时器节流

原理:setTimeout 节流的核心思想是通过定时器来控制函数的执行频率。当事件触发时设置定时器,当定时器结束后才能再次触发

Raf节流

介绍requestAnimationFrame

window.requestAnimationFrame()告诉浏览器——你希望执行一个动画,并且要求浏览器在下次重绘之前调用指定的回调函数更新动画。该方法需要传入一个回调函数作为参数,该回调函数会在浏览器下一次重绘之前执行

使用raf节流

实际中 test函数可以为 渲染固定个数虚拟dom等

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title>
</head>
<body><button id="start">start</button><button id="end">end</button>
</body>
<script>const log=raf()document.getElementById('start').addEventListener('click',log.start)document.getElementById('end').addEventListener('click',log.end)function raf(){let bool=falselet num=0function test(){console.log([num++,Date.now()])if(bool){requestAnimationFrame(test)}}return {start(){if(bool) returnbool=truerequestAnimationFrame(test)},end(){if(!bool) returnbool=false}}}
</script>
</html>

当屏幕刷新率为200hz
在这里插入图片描述
在这里插入图片描述
刷新200次经历了999ms
当屏幕刷新率为60hz
在这里插入图片描述
在这里插入图片描述
刷新60次经历967ms
即实现了在浏览器每帧之间调用test函数

注意点

  1. 当离开当前标签页(在后台时)时requestAnimationFrame函数会被暂挂 避免不必要的渲染

  2. test函数应该减少操作量
    若在test中加入

for(let i=0;i<1000000000;i++){}

在这里插入图片描述
刷新一次就耗时200ms+
若继续扩增则会阻塞主线程导致浏览器卡死

对比

定时器过度渲染
如果使用 setIntervalsetTimeout 来控制动画的更新频率可能会导致每 5 毫秒就进行一次 DOM 操作,然而,浏览器的渲染频率通常是每 16.6 毫秒(即每秒 60 帧)
即在两次浏览器渲染之间,可能会有多次 DOM 操作频繁触发回流和重绘。造成过度渲染

回流:浏览器重新计算dom元素的位置尺寸等
重绘:浏览器重新绘制dom元素的样式

raf渲染缺失
当俩帧之间执行过多操作时,导致主线程阻塞后浏览器帧率降低,从而出现渲染缺失。表现为动画卡顿或跳帧,影响用户体验。

特性setTimeout 节流requestAnimationFrame 节流
实现难度简单稍复杂
兼容性好(所有浏览器)较好(现代浏览器支持)
执行频率最多每秒约 250 次屏幕刷新率
性能优化无特殊优化与屏幕刷新同步,节能
延迟可能延迟低延迟,与屏幕刷新同步
适用场景通用场景,如按钮点击、输入框输入等动画、滚动、窗口大小调整等与屏幕刷新相关的场景
http://www.dtcms.com/a/575155.html

相关文章:

  • 【SOA仿真】SOA增益饱和特性仿真3
  • 百度不收录我的网站网站备案部门
  • 西宁知名网站制作公司多模室内设计网
  • 余弦相似度、矩阵分解、深度学习物品的复杂、非线性特征
  • 湖州市建设局网站各个国家的google网站
  • 岳阳网站建设联系方式服务称赞的项目管理平台
  • 回流焊过炉治具载具一般用在什么产品上
  • 佛山网站优化个人备案的网站可以卖东西么
  • 网站建设 2015年11月网上服装定制网站
  • C++标准项目---在线五子棋对战
  • 给个网站带颜色抵押网站建设方案
  • 新余网站开发公司首页排名seo
  • 南昌做网站优化哪家好北京哪里有教怎么做网站的
  • 集成学习算法XGBoost(eXtreme Gradient Boosting)基础入门
  • 指定网站建设前期规划方案重庆网站seo
  • 怎么查网站建设是哪家公司wordpress网站后台
  • 电子商务网站建设与管理基础重庆展示型网站制作
  • 鞍山自适应网站制作网站改版域名不变
  • rocketmq 的核心概念讲解
  • 注册了自己的网站中华始祖堂室内设计
  • 定制化网站建设假网站连接怎么做的
  • 中小企业网站建设免费注册电子邮箱
  • 建设银行企业版网站电脑上免费制作ppt的软件
  • 顺企网属于什么网站江西建设监理协会网站
  • 洛阳网站建设哪家公司好php网站建设文献综述
  • 功能测试与接口测试规范SOP流程
  • 网站项目计划书模板范文有做外贸个人网站
  • 可以做专利聚类分析的免费网站深圳自定义网站开发
  • 公司网站年费网站死链接怎么提交
  • 沈阳市绿云网站建设2023企业所得税300万以上