Vue首屏加载过慢出现白屏的六种优化方案

这篇具有很好参考价值的文章主要介绍了Vue首屏加载过慢出现白屏的六种优化方案。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Vue首屏加载过慢出现白屏的六种优化方案

公司业务展示官网开发,构建版本后在测试环境下,发下首屏加载损耗高达几十秒(服务器在国外,所以也导致加载时间变长),于是采用了以下方法来达到提速目的。 

1. 采用懒加载的方式

路由懒加载和组件懒加载:const One = ()=>import("./one");

图片懒加载:使用vue-lazyload插件

//引入vue懒加载
import VueLazyload from 'vue-lazyload'

//方法一:  没有页面加载中的图片和页面图片加载错误的图片显示
// Vue.use(VueLazyload)

//方法二:  显示页面图片加载中的图片和页面图片加载错误的图片
//引入图片
import loading from '@/assets/images/load.jpg'
//注册图片懒加载  
Vue.use(VueLazyload, {
  // preLoad: 1.3,
  error: '@/assets/images/error.jpg',//图片错误的替换图片路径(可以使用变量存储)
  loading: loading,//正在加载的图片路径(可以使用变量存储)
  // attempt: 1
})

2.webpack开启gzip压缩文件传输模式

gizp压缩是一种http请求优化方式,通过减少文件体积来提高加载速度。html、js、css文件甚至json数据都可以用它压缩,可以减小60%以上的体积。

 webpack打包时借助 compression webpack plugin实现gzip压缩,安装插件如下:npm i -D compression-webpack-plugin

在vue-cli 3.0 中,vue.config.js配置如下:

const CompressionPlugin = require('compression-webpack-plugin');//引入gzip压缩插件
module.exports = {
    plugins:[
        new CompressionPlugin({//gzip压缩配置
            test:/\.js$|\.html$|\.css/,//匹配文件名
            threshold:10240,//对超过10kb的数据进行压缩
            deleteOriginalAssets:false,//是否删除原文件
        })
    ]
}

服务器nginx开启gzip:

Vue首屏加载过慢出现白屏的六种优化方案 

3.依赖模块采用第三方cdn资源 

修改vue.config.js

module.exports = {
    ...
    externals: {
        'vue': 'Vue',
        'vuex': 'Vuex',
        'vue-router': 'VueRouter',
        'element-ui': 'ELEMENT'
    }    
    ...
}

4.禁止生成map文件

vue.config.js配置:

module.exports = {
    productionSourceMap: false, // 生产环境是否生成 sourceMap 文件,一般情况不建议打开
}

在设置了productionSourceMap: false之后,就不会生成map文件,map文件的作用在于:项目打包后,代码都是经过压缩加密的,如果运行时报错,输出的错误信息无法准确得知是哪里的代码报错。也就是说map文件相当于是查看源码的一个东西。如果不需要定位问题,并且不想被看到源码,就把productionSourceMap 置为false,既可以减少包大小,也可以加密源码。

5.去掉代码中的console和debugger

打包之后控制台很干净,部署正式环境之前最好这样做。

configureWebpack: config => {
    if (process.env.NODE_ENV === 'production') {
      config.optimization.minimizer[0].options.terserOptions.compress.warnings = false
      config.optimization.minimizer[0].options.terserOptions.compress.drop_console = true
      config.optimization.minimizer[0].options.terserOptions.compress.drop_debugger = true
      config.optimization.minimizer[0].options.terserOptions.compress.pure_funcs = ['console.log']
    }
  },

6. 预渲染配置

使用插件:prerender-spa-plugin 

vue.config.js中配置如下:文章来源地址https://www.toymoban.com/news/detail-409396.html

const PrerenderSpaPlugin = require('prerender-spa-plugin');
const Render = PrerenderSpaPlugin.PuppeteerRenderer;
const path = require('path');
 
configureWebpack: () => {
  if (process.env.NODE_ENV !== 'production') return;
  return {
    plugins: [
      new PrerenderSPAPlugin({
        // 生成文件的路径,也可以与webpakc打包的一致。
        // 下面这句话非常重要!!!
        // 这个目录只能有一级,如果目录层次大于一级,在生成的时候不会有任何错误提示,在预渲染的时候只会卡着不动。
        staticDir: path.join(__dirname, 'dist'),
 
        // 对应自己的路由文件,比如a有参数,就需要写成 /a/param1。
        routes: ['/', '/Login', '/Home'],
 
        // 这个很重要,如果没有配置这段,也不会进行预编译
        renderer: new Renderer({
          inject: {
            foo: 'bar'
          },
          headless: false,
          // 在 main.js 中 document.dispatchEvent(new Event('render-event')),两者的事件名称要对应上。
          renderAfterDocumentEvent: 'render-event'
        })
      })
    ]
  };
}

到了这里,关于Vue首屏加载过慢出现白屏的六种优化方案的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 解决Electron中WebView加载部分HTTPS页面白屏的方法

    Electron是一个开源的桌面应用程序框架,它允许使用Web技术构建跨平台的桌面应用。在Electron应用中, WebView 是一个常用的组件,用于嵌套加载Web内容。然而,有时候在加载使用 HTTPS 协议的页面时,可能会因为证书问题导致白屏现象。 问题描述: 当 WebView 尝试加载某些 HTTP

    2024年02月02日
    浏览(51)
  • vue组件间传值的六种方法

    父组件代码: 子组件代码: 页面显示: 子组件代码: 父组件代码: 页面显示: 父子组件传值原理:父子组件的关系可以总结为 prop 向下传递,事件向上传递。父组件通过 prop 给子组件下发数据,子组件通过事件给父组件发送消息,如下图所示: ref:如果在普通的 DOM 元素

    2024年02月15日
    浏览(49)
  • 【Vue学习笔记】跨域的六种解决方案

    @TOC 跨域问题指的是在浏览器端,当一个网页的脚本(如JavaScript)向另一个域名的网站发起请求时,如果两个网站的域名不一致,就会出现跨域问题。由于浏览器的同源策略(Same Origin Policy),默认情况下,脚本只能访问同一个域名下的资源,不能访问其他域名下的资源。

    2024年02月10日
    浏览(51)
  • vue项目切换页面白屏的解决方案

    问题描述 1、页面切换后白屏,同时切换回上一个页面同样白屏 2、刷新后正常显示 3、有警告: Component inside Transition renders non-element root node that cannot be animated 解决方法 Transition中的组件呈现不能动画化的非元素根节点 也就是说,组件内必须有一个根元素 之前: 现在:  原来

    2024年02月08日
    浏览(40)
  • 【Vue3】setup的注意点及watch监视属性的六种情况

    1.1setup的执行时间 1.setup的执行时间要比beforCreate执行要早 1.2.steup参数 setup的参数 1.props: 值为对象,包含: 组件外部传递过来,且组件内部声明接收了的属性 2.context:上下文对象 ①attrs:值为对象,包含: 组件外部传递过来,但没有在props配置中声明的属性,相当于 this.$attrs ②sl

    2023年04月22日
    浏览(33)
  • Vue首屏加载优化

    目录 打包优化 移除 preload(预载) 与 prefetch (预取) 可视化资源分析工具 开启gzip压缩 公共代码抽离 代码抽离前 代码抽离后 执行抽离模块 配置解析 CDN替换依赖包引入 移除无用文件 路由优化 动态路由懒加载,按需加载 动态添加路由 vue 脚手架默认开启了 preload 与 prefe

    2024年01月17日
    浏览(38)
  • 关于vue首屏加载loading问题

    注意:网上搜索出来的都是教你在index.html里面div id=\\\"app\\\"div class=\\\"loading\\\"/div或者在app.vue Mounte生命周期函数控制app和loading的显示和隐藏,这里会有一个问题,就是js渲染页面需要时间,一样会出现几秒钟白屏。mounted(包裹使用nextTick)执行回调div app的内容依然没有开始渲染。 正

    2024年02月09日
    浏览(41)
  • Android webview只加载10%且出现白屏问题排查解决

    有一个主页面,布局里是包含的一个Webview,页面跳转进入第二个页面也会加载一个新的WebView,但新的webView加载页面不成功,加载进度走到10%就不动了也没有报错信息。         首先出现的是主页面的webView一直加载不出来,但当时没有多想一直以为是网络的问题,杀死进程或

    2023年04月21日
    浏览(37)
  • 安卓部分手机使用webview加载链接后白屏(Android低版本会出现的问题)

    大爷:小伙我这手机怎么打开你们呢这个是白屏什么都不显示。 大娘:小伙我这也是打开你们呢这功能,就是一个白屏什么也没有,你们呢的应用不会有病毒吧。 小伙:我的手机也正常; 同事:我的也正常可以显示; 小伙:你们都是什么手机型号; 大爷:我的Android7.1.1

    2024年04月15日
    浏览(44)
  • Bean 的六种作用域

      目录 一、作用域是什么? 1、singleton(单例作用域) 2、prototype(原型作用域) 3、request(请求作用域) 4、session(回话作用域) 5、application(全局作用域) 6、websocket( HTTP WebSocket 作用域) 二、单例作⽤域VS 全局作⽤域 三、设置作用域 Bean的作用域是指Bean实例的生命周

    2024年02月10日
    浏览(37)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包