使用defer优化白屏时间 长列表渲染

创建 useDefer.js文件

复制代码
import { ref , onUnmounted } from 'vue'

export function useDefer(maxCount=100){
  const frameCount = ref(0)
  let rafId;
  function updateFrameCount(){
   rafId = requestAnimationFrame(()=>{
     frameCount.value++;
     if(frameCount.value>=maxCount){
        return;
     }
     updateFrameCount()
  })  
 } 
 updateFrameCount()
 onUnmounted(()=>{
   cancelAnimationFrame(rafId);
 })
 return function defer(n){
   return frameCount.value>=n
 }   
}
复制代码

在组件中使用

复制代码
 1 <template>
 2     <div>
 3         <div v-for="(item, index) in 1000" :key="index">
 4             <customComponent v-if="defer(index)"></customComponent>
 5         </div>
 6     </div>
 7 </template>
 8 
 9 <script setup>
10 import { useDefer } from './useDefer'
11 
12 const defer = useDefer()
13 </script>
复制代码

 

posted @   萨拉杨  阅读(157)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
点击右上角即可分享
微信分享提示