首屏白屏加载优化

1、计算首屏加载时间(如何体现性能优化了?)

        计算 Vue3 项目的首屏加载时间(First Screen Load Time,简称 FSL)可以帮助评估用户首次看到完整页面所需的时间。

2、优化手段

1、采用异步组件方式(拆分大模块,针对于组件的优化)

2、 使用骨架屏或 loading 动画缓解白屏

        比如首页加载视频流或摄像头列表前,先展示占位:<Skeleton :loading="loading" />

实践方式一:骨架屏

使用 Element Plus 的 <ElSkeleton> 示例:

Element Plus 的组件 <ElSkeleton>,它内部已经封装好了基于 loading 的显示逻辑。

    <ElSkeleton :loading="loading" animated> 会根据 loading 的值自动控制哪个插槽(slot)显示:

loading显示内容
true#template 插槽
false#default 插槽

实践方式二:图片加载 loading 占位图

3、 按需引入 Element Plus

4、 路由懒加载(vue-router 懒加载)

Vue Router 内部逻辑会判断:

  • 如果路由配置的 component 是一个函数(返回一个 Promise),就认为是异步组件;

  • Vue 会自动处理加载状态,不需要你额外用 defineAsyncComponent 包一层。

方法是否能懒加载推荐场景
() => import('...')是懒加载✅ 用于 Vue Router 配置
defineAsyncComponent是懒加载用于组件中显示时手动控制加载过程,比如显示 loading 或 error

如果你想在组件内手动加载一个异步组件并显示 loading 状态,那才用 defineAsyncComponent

### 白屏优化的方法 #### 一、了解白屏产生的原因 页面白屏的主要原因是由于资源加载延迟或者阻塞导致的。具体来说,当浏览器在解析 HTML 文件时遇到外部 CSS 或者内联 JS 脚本时,可能会发生阻塞行为[^3]。例如: - **CSS 加载阻塞**:如果 CSS 样式文件未完全加载,则即使 HTML 解析到某个阶段也无法渲染页面。 - **JavaScript 执行阻塞**:内联 JavaScript 或者某些特定类型的脚本会阻止 DOM 构建过程。 因此,针对这些问题可以采取多种措施来减少白屏现象的发生。 --- #### 二、具体的优化方案 ##### 1. 使用骨架 (Skeleton Screen) 通过提前定义好静态的 HTML 和 CSS 动画效果作为占位符展示给用户,在 Vue 实例真正挂载之前显示这些内容,从而缓解用户的等待感[^1]。 这种方式不仅能够改善用户体验,还能够在一定程度上隐藏真实的加载进度条逻辑。 ```html <div class="loading-screen"> <!-- Skeleton UI --> </div> <script type="text/javascript"> document.addEventListener('DOMContentLoaded', function () { const loadingScreen = document.querySelector('.loading-screen'); setTimeout(() => { if(loadingScreen){ loadingScreen.style.display = 'none'; // 移除 skeleton screen } }, 200); // 短暂延时模拟真实场景下的数据请求耗时 }); </script> ``` 上述代码片段展示了如何利用简单的 HTML 结构配合基础样式的实现方式创建一个临时性的视觉反馈机制。 --- ##### 2. SSR(服务端渲染) 采用服务器端渲染技术可以直接将初始 HTML 渲染结果返回客户端,这样就不必依赖于完整的 JavaScript 下载与执行流程即可呈现可见界面[^2]。对于大型应用而言尤其重要,因为它显著减少了包时间和次绘制所需的时间开销。 需要注意的是,虽然 SSR 提升了 SEO 友好度以及加快了展现速度,但它同时也增加了后端负载压力并可能带来额外复杂性管理上的挑战。 --- ##### 3. DNS Prefetching & Preconnect Optimization 为了进一步缩短网络交互带来的潜在瓶颈问题,可以通过预取域名信息(DNS prefetch)以及建立早期连接(preconnect),使得后续实际发起 HTTP 请求的时候能更快获得响应数据流。 ```html <head> <link rel="dns-prefetch" href="//example.com"> <link rel="preconnect" href="https://cdn.example.net"> </head> ``` 以上两行标签分别用于告知浏览器尽早准备访问指定主机地址的相关准备工作,进而达到加速整体链路传输效率的目的。 --- ##### 4. Lazy Loading Images And Other Media Resources 图片和其他多媒体组件往往是造成网页臃肿的重要因素之一。启用懒加载(lazy-loading)功能可以让非核心区域内的媒体对象仅在其即将进入视口范围之内才开始被下载处理,有效降低初期加载负担[^4]。 ```javascript const imagesToLoad = document.querySelectorAll("img[data-src]"); imagesToLoad.forEach((img) => { img.setAttribute("src", img.getAttribute("data-src")); img.removeAttribute("data-src"); }); ``` 此段脚本演示了一个简易版本的手动触发图像切换操作的过程;当然也可以考虑引入成熟的第三方库如 Intersection Observer API 来自动化这一进程。 --- ### 总结 综上所述,解决前端项目中的白屏问题是多方面共同努力的结果,既涉及到架构层面的设计调整也离不开细致入微的技术选型考量。合理运用诸如骨架设计、SSR 技术支持、DNS 层面调优以及按需加载策略等手段均有助于达成更佳的整体表现水平。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值