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

性能优化之分块渲染

在遇到大量数据需要渲染的时候,一次性渲染会阻塞主线程导致页面卡顿,可以用分块渲染提升页面性能,将大量DOM结点的渲染拆分为多个小任务,避免主线程长时间阻塞,减少页面卡顿。

<script setup lang="ts"> import { ref, onMounted } from 'vue' const tableData=ref<any[]>([]) const CHUNK_SIZE=100 const getData=async()=>{ try{ const res=await fetch('/api/mock') if(!res.ok) throw new Error(`请求失败${res.status}`) const data=await res.json() function* chunkGenerate(){ let index=0 while(index<data.length){ yield data.slice(index,index+CHUNK_SIZE) index+=CHUNK_SIZE } } const generator=chunkGenerate() const process=()=>{ const chunk=generator.next() if(!chunk.done){ tableData.value.push(...chunk.value) requestAnimationFrame(process) } } requestAnimationFrame(process) }catch(error){ console.log('error',error) } } getData() </script>

requestAnimationFrame是浏览器原生支持的API,浏览器的屏幕刷新率通常是60 帧 / 秒(FPS),也就是每≈16.67ms 会完成一次页面重绘(更新屏幕内容)。requestAnimationFrame(简称 RAF)的作用是:让你的回调函数,精准在 “下一次页面重绘之前” 执行,由浏览器统一调度,而非手动定时(比如setTimeout)。

为什么不能用setTimeout?

  • 处理数据的 JS(setTimeout 回调)在「渲染后」执行,处理完数据后,要等下一个 16.67ms 的渲染帧才能显示新数据;
  • 每批数据的渲染都被延迟至少 16.67ms,多批叠加后,肉眼会明显感觉到 “数据处理和画面更新不同步”,表现为 “掉帧、卡顿”;
  • 更糟的是:如果 setTimeout 的宏任务队列里有其他任务(比如用户点击回调),数据处理会被进一步推迟,渲染延迟更久。
requestAnimationFrame 的执行流程(同步无延迟)

RAF 的回调跳过宏 / 微任务队列,直接被渲染引擎调度到「渲染前」执行

http://www.cnnetsun.cn/news/95835.html

相关文章:

  • C++ 模板初阶:泛型编程的入门指南
  • 基于Java实现优雅关闭的规范化方案设计与实现
  • 时序数据战场巅峰对决:金仓数据库 VS InfluxDB深度解析
  • Windows任务管理器中CPU相关指标怎么看?
  • 【必藏】大模型入行晚了?现在就是黄金时机!小白到入门的完整路线
  • 系统思考与认知习惯
  • 速藏!2026年免费免版权音乐素材网站推荐!正规版权保障,商用无压力不侵权
  • 【数据分享】1951-2024年我国省市县三级逐日、逐月和逐年近地面气温数据(Shp/Excel格式)
  • 金融行业广告投放:在合规的赛道上,实现精准增长
  • 长安汽车11月销量28.3万辆,同比增长2.3%
  • 1688 商品详情接口深度解析:从百川签名突破到供应链数据重构
  • LobeChat心理情绪日记分析工具
  • 一文搞懂纸老虎-布隆过滤器
  • LobeChat周年庆感恩回馈活动
  • 运维系列数据库系列【仅供参考】:DM JOB作业的邮件发送
  • 当AI面临伦理投诉时,AI应用架构师该怎么办?这5个解决步骤
  • 主存编址是什么
  • Python 整合 Redis 哨兵(Sentinel)与集群(Cluster)实战指南
  • HLS技术的局限性说明
  • 水文监测站:水资源管理的“千里眼”与“顺风耳”
  • 白银波动幅度大于黄金的原因:市场规模与属性差异深度解析
  • 【2026版】Spring Boot面试题
  • 办公小程序开发----提高工作效率
  • Jmeter 命令行压测生成HTML测试报告
  • AI编程系列——mcp与skill
  • 技术文章大纲:当云原生遇见VMware
  • AI Agent开发全攻略:2025年核心技术栈与学习资源,从新手到专家的蜕变之路!
  • LobeChat实体抽取能力在CRM中的应用
  • Java毕设项目:基于springboot天气预报查询系统(源码+文档,讲解、调试运行,定制等)
  • Netcode for GameObjects Boss Room 多人RPG战斗(6)