news 2026/2/7 6:49:50

使用帧加载vue组件

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
使用帧加载vue组件

背景

首页渲染页面的时候,因为加载的元素特别多,页面会出现白屏

解决方案

使用浏览器的API requestAnimationFrame, 比如每一帧加载一个组件,依次加载所有的组件

举例说明

目录结构

components --HeavyComp.vue APP.vue useDefer.js

useDefer.js

import { ref } from 'vue'; export function useDefer(speed = 1) { const count = ref(0); let frame = 0; function update() { frame++; if (frame % Math.round(60 / speed) === 0) { count.value++; } requestAnimationFrame(update); } update(); return function (n) { return count.value >= n; }; }

APP.vue

<script setup> // import HelloWorld from './components/HelloWorld.vue' import HeavyComp from './components/HeavyComp.vue'; import { useDefer } from './useDefer.js'; const defer = useDefer(); </script> <template> <div> <a href="https://vite.dev" target="_blank"> <img src="/vite.svg" class="logo" alt="Vite logo" /> </a> <a href="https://vuejs.org/" target="_blank"> <img src="./assets/vue.svg" class="logo vue" alt="Vue logo" /> </a> </div> <!-- <div class="container"> <div v-for="n in 100" :key="n"> <heavy-comp></heavy-comp> </div> </div> --> <div class="container"> <div v-for="n in 100" :key="n"> <heavy-comp v-if="defer(n)"></heavy-comp> </div> </div> </template> <style scoped> .logo { height: 6em; padding: 1.5em; will-change: filter; transition: filter 300ms; } .logo:hover { filter: drop-shadow(0 0 2em #646cffaa); } .logo.vue:hover { filter: drop-shadow(0 0 2em #42b883aa); } .container { display: grid; grid-template-columns: repeat(3, 1fr); grid-gap: 1em; } </style>

HeavyComp.vue

<script setup> import { ref } from 'vue' defineProps({ msg: String, }) const count = ref(50) </script> <template> <div v-for="i in count" :key="i"> <p> Check out <a href="https://vuejs.org/guide/quick-start.html#local" target="_blank" >create-vue</a >, the official Vue + Vite starter </p> <p> Learn more about IDE Support for Vue in the <a href="https://vuejs.org/guide/scaling-up/tooling.html#ide-support" target="_blank" >Vue Docs Scaling up Guide</a >. </p> <a href="https://vite.dev" target="_blank"> <img src="/vite.svg" class="logo" alt="Vite logo" /> </a> <a href="https://vuejs.org/" target="_blank"> <img src="../assets/vue.svg" class="logo vue" alt="Vue logo" /> </a> </div> </template> <style scoped> .read-the-docs { color: #888; } </style>

效果展示

组件会一步步加载,公司禁止图片,老弟这里没法贴图。自己运行代码查看吧。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/2/5 16:37:32

3.9 Elasticsearch-跨集群搜索(CCS)与跨集群复制(CCR)

3.9 Elasticsearch-跨集群搜索&#xff08;CCS&#xff09;与跨集群复制&#xff08;CCR&#xff09; 1. 功能定位 CCS&#xff08;Cross-Cluster Search&#xff09;&#xff1a;把查询请求同时发往本地与远程集群&#xff0c;结果聚合后统一返回&#xff0c;解决“数据分散、…

作者头像 李华
网站建设 2026/2/5 17:46:51

用NATS+AI快速构建物联网数据采集原型

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 开发一个物联网数据采集系统原型&#xff0c;使用NATS处理设备上报的传感器数据。要求实现设备注册、数据收集、实时监控和异常报警功能。前端使用Vue.js展示实时数据仪表盘&#x…

作者头像 李华
网站建设 2026/2/7 2:44:48

Excel格式转换异常?新手必看的5分钟解决指南

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 创建一个面向初学者的交互式Excel格式转换教学应用。通过分步引导的方式&#xff1a;1) 展示常见格式错误现象 2) 解释exceltype参数的含义 3) 提供可视化参数选择器 4) 实时预览转…

作者头像 李华
网站建设 2026/2/6 23:36:21

【智能聊天助手部署教程 (基于 Streamlit + Ollama)】

&#x1f680; 智能聊天助手部署教程 (基于 Streamlit Ollama) 文章目录 &#x1f680; 智能聊天助手部署教程 (基于 Streamlit Ollama)✅ 1. 环境准备 (Prerequisites)&#x1f4e5; 2. 获取项目代码&#x1f6e0;️ 3. 安装依赖 (Dependencies)⚙️ 4. 配置文件设置 (Confi…

作者头像 李华