vue项目首次打开时加载速度很慢的优化过程

目录
  • vue首次打开时加载速度很慢
  • 优化vue项目加载过慢问题
    • 发现问题
    • 优化方案
    • 优化方法

vue首次打开时加载速度很慢

1、使用 vue-router 懒加载解决首次加载时资源过多导致的速度缓慢问题

当你的 SPA(单页应用程序)变得很复杂时,打包构建后的 js 包会变得非常大,以至于严重影响页面的加载时间。vue-router 支持 webpack 内置的异步模块加载系统。所以,那些使用较少的路由组件不必打包进 bundles 里,只要在路由被访问时按需加载。

懒加载路由写法:

{
	path: "/base/user",
	name: "user",
	component: resolve => require.ensure([], () => resolve(require('@/modules/base/user/User')), 'User'),
	meta: {
		breadcrumb: ["基本信息", "用户管理"]
	}
},
{
	path: "/base/role",
	name: "role",
	component: resolve => require.ensure([], () => resolve(require('@/modules/base/role/Role')), 'Role'),
	meta: {
		breadcrumb: ["基本信息", "角色管理"]
	}
}

2、使用CDN加速

以引入vue、vuex、vue-router为例:

第一步,在index.html中,添加CDN资源:

<!-- 引入Vue.js -->
<script src="https://cdn.staticfile.org/vue/2.4.3/vue.min.js"></script>
<!-- 引入vuex.js -->
<script src="https://cdn.staticfile.org/vuex/3.0.0/vuex.min.js"></script>
<!-- 引入vue-router -->
<script src="https://cdn.staticfile.org/vue-router/3.0.0/vue-router.min.js"></script>

第二步,在 bulid/webpack.base.conf.js 文件中,增加 externals,将引用的外部模块导入,如下:

第三步,将所有的引用去掉:

// import Vue from "vue";
// 引入element 组件
// import ElementUI from "element-ui";
// import "element-ui/lib/theme-chalk/index.css";
// import VueRouter from "vue-router";
// import Vuex from "vuex";
// Vue.use(ElementUI);
// Vue.use(VueRouter);
// Vue.use(Vuex);

优化vue项目加载过慢问题

发现问题

线上访问地址加载时间很慢

优化方案

1、webpack-bundle-analyzer 是 webpack的可视化资源分析工具,优化之前下载webpack-bundle-analyzer。

npm i webpack-bundle-analyzer 
或者
cnpm i webpack-bundle-analyzer

2、配置vue.config.js文件

chainWebpack(config){
	config.plugin('webpack-bundle-analyzer').use(require('webpack-bundle-analyzer').BundleAnalyzerPlugin)
}

3、 执行 npm run build --report 即可 浏览器会自动打开一个页面,如下图所示

优化方法

1、使用CDN减小代码体积加快请求速度

使用CDN主要解决两个问题:

  • 1. `打包时间太长、打包后代码体积太大,请求慢`
  • 2. `服务器网络不稳带宽不高,使用cdn可以回避服务器带宽问题`

我们将vue,vue-router,vuex,axios,echarts,element,moment使用CDN资源引入。国内的CDN服务推荐使用 bootCDN

1.1、在index.html里引入线上cdn

1.2、在vue.config.js配置中配置是为了在加载的时候,引用cdn资源 而不是node_modules里的包

configureWebpack:{
	externals: {
      'echarts': 'echarts',
      'vue': 'Vue',
      'vuex': 'Vuex',
      'vue-router': 'VueRouter',
      'axios': 'axios',
      'moment': 'moment',
      'element-ui': 'ELEMENT'
    },
}

同时注销掉main.js文件当中的import

 2、开启gzip压缩

npm i compression-webpack-plugin@1.1.12 --save-dev 新版本有问题的话下载1.1.12版本配置vue.config.js

const CompressionWebpackPlugin = require('compression-webpack-plugin')
configureWebpack:{
	plugins:[
      new CompressionWebpackPlugin({
        filename: '[path].gz[query]',
        algorithm: 'gzip',
        // test: /\.js$|\.html$|\.json$|\.css/,
        test: /\.js$|\.json$|\.css/,
        threshold: 10240, // 只有大小大于该值的资源会被处理
        minRatio: 0.8, // 只有压缩率小于这个值的资源才会被处理
        // deleteOriginalAssets: true // 删除原文件
      })
    ],
}

需要nginx服务器,更改nginx.conf文件, 加在如图所示位置

# 开启gzip。
gzip on
# 开启后如果能找到 .gz 文件,直接返回该文件,不会启用服务端压缩。
gzip_static on
# 文件大于指定 size 才压缩,以 kb 为单位。
gzip_min_length 1;
# 用于识别http协议的版本,早期的浏览器不支持gzip压缩,用户会看到乱码,所以为了支持前期版本加了此选项,目前此项基本可以忽略
gzip_http_version 1.1;
# 压缩级别,1-9,值越大压缩比越大,但更加占用 CPU,且压缩效率越来越低。
gzip_comp_level 9;
# 压缩的文件类型。
gzip_types text/css application/javascript application/json;
root /dist;

3、路由懒加载

export const constantRoutes = [
  {
    path: '/login',
    component: () => import('@/views/login'),
    hidden: true
  },

  {
    path: '/auth-redirect',
    component: () => import('@/views/login/auth-redirect'),
    hidden: true
  },

  {
    path: '/404',
    component: () => import('@/views/404'),
    hidden: true
  },
]

4、图片放在oss上,不放在项目的assets文件夹下

对象存储(oss)提供内置的CDN集成,可以缓存资产以加快页面加载速度。对象存储非常适合存储静态资源,例如,用于存储用户定义的内容:图像和电影,存储备份文件和日志。更换项目里的图片路径,为线上地址即可。

5.去除ScourpMap文件

配置一下vue.config.js即可

productionSourceMap: false,//去除.map文件

6.压缩代码,移除console.log

npm i uglifyjs-webpack-plugin@1.1.1 --save-dev

配置vue.config.js

const isProduction = process.env.NODE_ENV === 'production';
const UglifyJsPlugin = require('uglifyjs-webpack-plugin')
chainWebpack(config) {
    const plugins = [];
    if (isProduction) {
      plugins.push(
        new UglifyJsPlugin({
          uglifyOptions: {
            output: {
              comments: false, // 去掉注释
            },
            warnings: false,
            compress: {
              drop_console: true,
              drop_debugger: false,
              pure_funcs: ['console.log']//移除console
            }
          }
        })
      )
    }
  }

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

(0)

相关推荐

  • vue终极性能优化方案(解决首页加载慢问题)

    目录 前言 1.路由懒加载 2.打包文件中去掉map文件 3.CDN引入第三方库 4.gzip打包 1.npmi-Dcompression-webpack-plugin 2.在vue.config.js中配置 3.在NGINX中配置 5.终极大招,预渲染 1.cnpminstallprerender-spa-plugin--save-dev 2.vue.config.js 3.router.js 4.main.js 总结 前言 用vue开发项目上线以后,发现首页加载速度非常慢,如果项目比较大,甚

  • Vue页面首次载入优化的全过程

    目录 前言 1.图片优化 2.禁止生成.map文件 3.路由懒加载 4.cdn引入公共库 5.终极法宝 GZIP压缩 6.利用vue-router进行页面的懒加载(lazy load) 总结 前言 今天是把自己开发的博客系统发布到了线上,但就只是把build出来的dist文件夹随便扔在了云服务器根目录下,导致在首次进入页面的时候非常的慢.所以需要进行优化. 优化前的大小 1.图片优化 之前为了方便开法,背景图片直接在assets里面扔了一个jpg,导致加载这张图片的时候就用了十几秒,于是乎我就把

  • vue项目首屏打开速度慢的解决方法

    最近接手了一个后台管理系统,技术栈主要是vue全家桶+elementui,老大打开测试环境页面的时候,说看到首页需要6秒钟,那如何进行优化呢? 首先我们需要安装webpack-bundle-analyzer // webpack.prod.conf.js if (config.build.bundleAnalyzerReport) { const BundleAnalyzerPlugin = require('webpack-bundle-analyzer').BundleAnalyzerPlu

  • Vue如何提升首屏加载速度实例解析

    在Vue项目中,引入到工程中的所有js.css文件,编译时都会被打包进vendor.js,浏览器在加载该文件之后才能开始显示首屏.若是引入的库众多,那么vendor.js文件体积将会相当的大,影响首屏的体验. 这是优化前的页面加载状态:执行npm run build打包项目,出来的vendeor.js文件,基本都是1M以上的的巨大文件,没有用户能忍受5s以上的loading而不关闭页面的,如图所示: 当项目在挂载到服务器上,平均都是10S以上加载出来,好家伙这加载时间,仿佛过了半个世纪,很烦人,

  • vue项目首次打开时加载速度很慢的优化过程

    目录 vue首次打开时加载速度很慢 优化vue项目加载过慢问题 发现问题 优化方案 优化方法 vue首次打开时加载速度很慢 1.使用 vue-router 懒加载解决首次加载时资源过多导致的速度缓慢问题 当你的 SPA(单页应用程序)变得很复杂时,打包构建后的 js 包会变得非常大,以至于严重影响页面的加载时间.vue-router 支持 webpack 内置的异步模块加载系统.所以,那些使用较少的路由组件不必打包进 bundles 里,只要在路由被访问时按需加载. 懒加载路由写法: { pat

  • vue项目实现图片懒加载的简单步骤

    目录 1.安装vue-lazyload插件 2.在main.js中进行引用 3.使用(将图片设置为懒加载) 总结 1.安装vue-lazyload插件 npm install vue-lazyload --save-dev 2.在main.js中进行引用 import VueLazyload from "vue-lazyload"; Vue.use(VueLazyload); //或者自定义配置插件 Vue.use(VueLazyload, { preLoad: 1.3, error:

  • vue项目中图片懒加载时出现的问题及解决

    目录 vue图片懒加载的问题 vue图片懒加载实现步骤 vue图片懒加载踩过的坑 今天踩过的坑总结 vue图片懒加载的问题 项目中遇到一个问题,记录一下,vue项目中前期没有做图片懒加载的时候,当图片出现错误或者显示路径不对,我加了onerror事件进行错误监听并添加一张默认的图片,优化用户体验. 后期因为图片数量变多,所以加入了图片懒加载,但在懒加载中挂载时只加了loading的图片,没有加error,所以导致页面图片未正常加载的地方出现默认图片闪烁的现象,最后在挂载时加入error引入一张默

  • Vue项目build后,图片加载不出来的解决

    目录 Vue项目build图片加载不出来 1.在config/index.js文件内 2.在webpack.prod.conf.js文件内 3.在utils.js文件里添加 publicPath:'../../' Vue项目打包后部分图片不显示 Vue项目build图片加载不出来 vue项目,build之后会对图片进行处理,具体处理的方式是在文件webpack.base.conf.js中,有如下代码: module: {     rules: [      {         test: /\.

  • 详解vue项目首页加载速度优化

    凡是做SPA的项目,特别是移动端的SAP项目,首屏加载速度必定是一个绕不过去的话题.接下来我就我们项目里的一些实践来做一下总结.希望抛砖引玉,如果各位有更好的方案,不吝赐教. 1: 针对第三方js库的优化 我们项目里用到的第三方js库主要有:vue, vue-router, vuex, axio, 我们还用到了qiniu.大家知道这些依赖库的js文件都会被一起打包到vender那个js文件里面,如果这些你的第三方依赖库很多,很大的话,那就会导致vender这个文件很大,那首屏加载的速度肯定会被拖

  • 浅谈VUE单页应用首屏加载速度优化方案

    单页应用会随着项目越大,导致首屏加载速度很慢!!!以下给出在下知道的几种优化方案 使用CDN资源,减小服务器带宽压力 路由懒加载 将一些静态js css放到其他地方(如OSS),减小服务器压力 按需加载三方资源,如iview,建议按需引入iview中的组件 使用nginx开启gzip减小网络传输的流量大小 webpack开启gzip压缩 若首屏为登录页,可以做成多入口,登录页单独分离为一个入口 使用CDN资源,减小服务器带宽压力 在index.html中引入cdn资源 ... <body> &

  • Javascript加载速度慢的解决方案

    通常我们的网站里面会加载一些js代码,统计啊,google广告啊,百度同盟啊,阿里妈妈广告代码啊,一堆,最后弄得页面加载速度很慢,很慢. 解决办法:换一个js包含的方式,让javascript加载速度倍增. 把通常加载方式: 复制代码 代码如下: <script src="xxxx.js"></script> 改变成: 复制代码 代码如下: <script type="text/javascript"> document.writ

  • 让javascript加载速度倍增的方法(解决JS加载速度慢的问题)

    通常我们的网站里面会加载一些js代码,统计啊,google广告啊,百度同盟啊,阿里妈妈广告代码啊, 一堆,最后弄得页面加载速度很慢,很慢. 解决办法:换一个js包含的方式,让javascript加载速度倍增. 把通常加载方式: <script src="xxxx.js"></script> 改变成: 复制代码 代码如下: <script type="text/javascript"> document.write("&l

  • vue 首页加载,速度优化及解决首页白屏的问题

    目录 一.Spa单页面的加载过程 二.首页加载慢的原因 三.加载速度慢解决方案 1.分离打包第三方资源包 2.第三方库使用CDN引入 3.vue-router路由懒加载 4.静态资源压缩,代码压缩,图片压缩 5.不要滥用三方库 6.去掉编译中的map文件 7.代码层面的优化 四.解决白屏,体验优化 一.Spa单页面的加载过程 1.首先就是html,也就是FP阶段 <div id="app"></div>  页面在导航后首次呈现出不同于导航前内容的时间点,有一个东

随机推荐