Vue首页加载白屏原因以及10种解决方法汇总

 更新时间:2023年03月02日 15:13:33   作者:进阶的巨人001  
这篇文章主要介绍了Vue首页加载白屏原因以及10种解决方法汇总,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

首先说一下首页加载为什么会白屏?

先说下Spa单页面的加载过程

首先就是html,也就是FP阶段

<div id="app"></div> 

页面在导航后首次呈现出不同于导航前内容的时间点,有一个东西回来渲染在页面上了

然后是静态资源css,js,之后解析js,生成HTML,也就是FCP阶段,css,js资源加载下来了,首次的内容绘制,有一个大结构了

<div id="app">
  <div class="header"></div>
</div>

比如app根目录里面有一个header,div

到最后,就是FMP,ajax请求数据之后,首次有效绘制,就是页面加载差不多了,但是可能图片还没加载出来

总结:

从FP到FMP这个过程全是白屏,可能你的header如果有啥大背景色啊,这个背景色或许会出来,ajax之后,才会真正去解析我们的数据,把数据放入我们的html标签中。

如下图所示:

得说解决首屏加载慢的办法了,我总结了10种!

1.预渲染

预渲染就是webpack打包时候渲染,通过无头浏览器

无头浏览器,打包的时候,可以把你index.html的内容放入你这个浏览器,但是你这个浏览器是空白的,然后当你进入页面时候直接加载这个index.html,但是没ajax请求

获取到预渲染的页面html内容,然后再放入index.html,再到CDN,直接请求html(相当于FMP提前到了FP),其实更像另外一种骨架屏,少了ajax请求

但是由于这样做我们只能添加死数据,而不能把ajax请求的数据渲染到首页上,怎么解决呢?

我们可以在app.vue中

<div id="header"></div>

比如要在这个header标签里面加ajax请求

直接在script中请求给它添加数据即可

document.querySelector('#header').html('...')

2.同构

何为同构渲染,就是一套代码多端使用

现在有一些框架,Next,Nuxt,类似于渲染就是vue ->json ->vue-server-renderer ->html

3.SSR

服务端渲染也可以解决首屏加载慢这个问题,因为服务端会把所有数据全部渲染完成再返回给客户端

ssr =>请求->node->解析 ->吐回给客户端(带请求数据)

但是有一个大问题,重要的是node层,高并发的解决

4.路由懒加载

可以通过plugin-syntax-dynamic-import 这个插件

Vue.component('async-component',(resolve)=>{
  import('./AsyncComponent.js')
  .then((AsyncComponent)=>{
    resolve(AsyncComponent.default)
  })
})

但是现在好像直接可以通过箭头函数实现路由懒加载

const app = () =>import('')

5.quicklink

quicklink就是在浏览器空闲的时候去指定需要加载的数据,这个是谷歌开源的,可以去看看

6.使用Gzip压缩

减少文件体积,加快首屏页面打开速度

前提是服务器那边得开启gzip

前端需要做的事

npm i compression-webpack-plugin -D

vue.config.js

const CompressionPlugin = require("compression-webpack-plugin")

module.exports = {
  configureWebpack: () => {
    if (process.env.NODE_ENV === 'production') {
      return {
        plugins: [
          new CompressionPlugin({
            test: /\.js$|\.html$|\.css$|\.jpg$|\.jpeg$|\.png/, // 需要压缩的文件类型
            threshold: 10240, // 归档需要进行压缩的文件大小最小值,我这个是10K以上的进行压缩
            deleteOriginalAssets: false, // 是否删除原文件
            minRatio: 0.8
          })
        ]
      }
    }
  }
}

7.外链CSS,JS文件

很多时候我们在main.js中直接import一些ui库或者css文件啥的,以后可以在index.html,通过script外链引入,这样就不会通过我们的webpack打包

8.webpack entry

这个就是将单页改成多页应用,比如一些组件中,vue.js vue-router等插件已经在某个页面使用了,然后给它缓存起来,下次就无需加载

9.骨架屏

骨架屏就是在进入项目的FP阶段,给它来一个类似轮廓的东西,当我们的页面加载完成之后就消失,这个也很好做的,很多ui库都有这个东西,可以参考一下

10.loading

首页加一个loading或许是最原始的方法了,在index.html里加一个loadingcss效果,当页面加载完成消失

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • vue3+ts深入组件Props实例详解

    vue3+ts深入组件Props实例详解

    Props是组件之间进行数据传递的一种方式,可以将数据从父组件传递给子组件,这篇文章主要介绍了vue3+ts深入组件Props的实例详解,需要的朋友可以参考下
    2023-09-09
  • 解决vue项目中页面调用数据 在数据加载完毕之前出现undefined问题

    解决vue项目中页面调用数据 在数据加载完毕之前出现undefined问题

    今天小编就为大家分享一篇解决vue项目中页面调用数据 在数据加载完毕之前出现undefined问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-11-11
  • vue 路由切换过渡动效滑入滑出效果的实例代码

    vue 路由切换过渡动效滑入滑出效果的实例代码

    在支付宝账单页面有这样一个特效切换过渡动效滑入滑出效果,非常方便实用,那么这个功能如何实现的呢?下面小编通过vue实现路由切换过渡动效滑入滑出效果,感兴趣的朋友一起看看吧
    2022-03-03
  • 关于vue路由监听事件跳转的问题

    关于vue路由监听事件跳转的问题

    这篇文章主要介绍了关于vue路由监听事件跳转的问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-08-08
  • vue实现列表滚动的过渡动画

    vue实现列表滚动的过渡动画

    这篇文章主要为大家详细介绍了vue实现列表滚动的过渡动画,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-06-06
  • Vue extend使用示例深入分析

    Vue extend使用示例深入分析

    这篇文章主要介绍了Vue.extend使用示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-08-08
  • Vue自定义指令详细

    Vue自定义指令详细

    这篇文章主要介绍了Vue自定义指令,文章从背景开始详细介绍Vue自定义指令的详细内容,随着Vue自定义指令的相关资料展开具体内容,需要的朋友可以参考一下
    2021-11-11
  • Vue按需加载的具体实现

    Vue按需加载的具体实现

    本篇文章主要介绍了Vue按需加载的具体实现,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-12-12
  • Vue3兄弟组件传值之mitt的超详细讲解

    Vue3兄弟组件传值之mitt的超详细讲解

    之前只是浅显的使用插件进行vue开发展示,最近深入的研究了下,下面这篇文章主要给大家介绍了关于Vue3兄弟组件传值之mitt的超详细讲解,需要的朋友可以参考下
    2022-06-06
  • vue3中element-plus Upload上传文件代码示例

    vue3中element-plus Upload上传文件代码示例

    这篇文章主要介绍了vue3中element-plus Upload上传文件的相关资料,在时间开发中上传文件是经常遇到的一个需求,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2023-08-08

最新评论