解决首屏渲染白屏时间过长

本文探讨了在Vue3项目中,通过使用`defer`函数和`v-if`结合,如何解决代码重构导致的首屏加载过长问题,实现按需加载用户体验优化。作者提供了详细的代码示例和优化思路。
摘要由CSDN通过智能技术生成

1.问题

例如当代码中重组件过多等,造成首屏加载时间过长导致的白屏

2.方案

考虑到用户体验,先加载用户第一眼主要看到的页面,其余的一些放在之后加载,即延迟渲染。

3.思路

定义defer函数,与组件绑定,组件v-if绑定函数返回值true或false决定组件渲染时机。

4.代码

vue3项目写法:

<div>
    <div v-for="n in 100">
        <heavy-com v-if="defer(n)"></heavy-com>
    </div>
</div>
export function useDefer() {
    // 获取目前渲染多少帧,定义响应式数据
    const count = ref(0)

    let raId;

    // 刷新帧函数,max根据项目情况设定默认值进行优化
    function updateCount(max = 100) {
        requestCount(() => {
            count.value++
                if (count.value >= max) {
                    return;
                }
            updateCount()
        })
    }
    updateCount()

    // 组件销毁时停止计算
    onUnMounted(() => {
        cancelAnimationFrame(raId)
    })

    return function defer(n) {
        // return 目前渲染了多少帧>=n
        //到达指定临界点后返回true,组件开始依次渲染
        return count.value >= n
    }
}

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值