vuecli做了个spa项目,大概有几十个个路由
直接 npm run build打包出来,有一个 1M的巨大 js文件,导致首页白屏时间过长

分析工具

vuecli 2.x自带了分析工具,只要运行 npm run build --report

如果是 vuecli 3的话,先安装插件

cnpm intall webpack-bundle-analyzer -–save-dev

然后新建vue.config.js,对 webpack进行配置:

chainWebpack: (config) => {/* 添加分析工具*/if (process.env.NODE_ENV === 'production') {if (process.env.npm_config_report) {config.plugin('webpack-bundle-analyzer').use(require('webpack-bundle-analyzer').BundleAnalyzerPlugin).end();config.plugins.delete('prefetch')}} }

再运行 npm run build --report

会在浏览器打开一个项目打包的情况图,便于直观地比较各个 bundle文件的大小

优化策略:

1、路由懒加载

在 router.js文件中,原来的静态引用方式,如:

import ShowBlogs from '@/components/ShowBlogs'routes:[ path: 'Blogs', name: 'ShowBlogs', component: ShowBlogs ]

改为:

 routes:[ path: 'Blogs',name: 'ShowBlogs',component: () => import('./components/ShowBlogs.vue')]

如果是在 vuecli 3中,我们还需要多做一步工作
因为 vuecli 3默认开启 prefetch(预先加载模块),提前获取用户未来可能会访问的内容
在首屏会把这十几个路由文件,都一口气下载了
所以我们要关闭这个功能,在 vue.config.js中设置:

2、ui框架按需加载

这里以饿了么ui为例:
原本的引进方式引进了整个包:

import ElementUI from 'element-ui'
Vue.use(ElementUI)

但实际上我用到的组件只有按钮,分页,表格,输入与警告
所以我们要按需引用:

import { Button, Input, Pagination, Table, TableColumn, MessageBox } from 'element-ui';
Vue.use(Button)
Vue.use(Input)
Vue.use(Pagination)
Vue.prototype.$alert = MessageBox.alert

注意 MessageBox注册方法的区别,并且我们虽然用到了 alert,但并不需要引入 Alert组件

在 .babelrc / babel.config.js文件中添加( vue-cli 3要先安装 babel-plugin-component):

plugins: [["component",{"libraryName": "element-ui","styleLibraryName": "theme-chalk"}]]

3、gzip压缩

安装 compression-webpack-plugin

cnpm i compression-webpack-plugin -D

在 vue.congig.js中引入并修改 webpack配置:

const CompressionPlugin = require('compression-webpack-plugin')configureWebpack: (config) => {if (process.env.NODE_ENV === 'production') {// 为生产环境修改配置...config.mode = 'production'return {plugins: [new CompressionPlugin({test: /\.js$|\.html$|\.css/, //匹配文件名threshold: 10240, //对超过10k的数据进行压缩deleteOriginalAssets: false //是否删除原文件})]}}

在服务器我们也要做相应的配置
如果发送请求的浏览器支持 gzip,就发送给它 gzip格式的文件
我的服务器是用 express框架搭建的
只要安装一下 compression就能使用

const compression = require('compression')
app.use(compression())

注意,后面这一句,要放在所有其他中间件注册之前

性能优化是一个非常令人愉悦的过程,同时也是个深坑,有着太多东西,本篇文章开了个头,希望能对大家有所帮助,也欢迎大家一起交流~

vue首屏性能优化,解决页面加载时间过长(白屏)方法相关推荐

  1. 页面加载时间过长的解决

    有时候会遇到这样的问题: 页面加载时间很长,需要一个友好界面来load这段空白时间, 而页面未加载的时候,页面里面的表单元素都是不存在的, 那前台写的初始化的js肯定是用不了了, 怎么办? 到网上搜了 ...

  2. 移动4G网络App页面加载时间过长

    移动4G网络App页面加载时间过长 发现问题 2016年12月份开始,使用android客户端的部分用户反映在使用移动4G网络的情况下,App内的页面加载时间过长,几乎加载不出来,导致无法正常使用Ap ...

  3. Python+selenium自动化:页面加载慢、超时加载情况下内容已经加载完毕的快速执行脚本解决方案,页面加载时间过长优化方案

    driver.set_page_load_timeout(3) 页面加载时间设置 3 秒,执行到某一步涉及页面加载如果加载时间超过 3 秒就会停止加载并抛出异常,其实这个时候页面内的元素已经加载出来了 ...

  4. 优化JS加载时间过长的一种思路

    文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/. 1.背景 去年公司在漳州的一个项目中,现场工程人员反映地图部分出图有点 ...

  5. vue 判断页面加载完成_vue之骨架屏踩坑之路

    vue的首屏优化方式有很多种 骨架屏就是其中之一 作为一个前端开发 用户体验感是很重要的 关于页面的loading状态的展示,目前主流的主要有loading图和进度条两种 现今使用骨架屏的也越来越多 ...

  6. 网页性能优化之异步加载js文件

    一个网页的有很多地方可以进行性能优化,比较常见的一种方式就是异步加载js脚本文件.在谈异步加载之前,先来看看浏览器加载js文件的原理. 浏览器加载 JavaScript 脚本,主要通过<scri ...

  7. 移动网站性能优化:网页加载技术概览

    移动网站性能优化:网页加载技术概览 2013/08/27 | 分类: IT技术 | 0 条评论 | 标签: WEB开发, 性能优化, 移动 分享到: 47 本文由 伯乐在线 - 伯乐在线读者 翻译自  ...

  8. 前端vue js 高德地图实现雷达扫描加载,借鉴百度地图等方法,采用Canvas解决雷达背景透明度问题,解决Canvas动态指针扫描造成浏览器卡顿问题

    前端vue js 高德地图实现雷达扫描加载,借鉴百度地图等方法,采用Canvas解决雷达背景透明度问题,解决Canvas动态指针扫描造成浏览器卡顿问题 经过3天的尝试,借鉴了好几个博客的思路,开发了一 ...

  9. nwjs解决页面透明化,启动时显示白屏的问题

    nwjs解决页面透明化,启动时显示白屏的问题 参考文章: (1)nwjs解决页面透明化,启动时显示白屏的问题 (2)https://www.cnblogs.com/jinling/p/6068918. ...

最新文章

  1. 电动三轮司机被撞身亡担主责 警方书面回应家属质疑
  2. VMware 虚拟化编程(9) — VMware 虚拟机的快照
  3. python对文件的读写操作方式-python 文件读写操作
  4. html文件执行顺序,网页的加载和执行顺序?
  5. JavaSE-21 字符编码简介
  6. 基础篇--Java IO--概览
  7. pandas之Series
  8. iPhone 12 Pro Max机模曝光:有乔布斯内味儿了
  9. php二级评论怎么实现,ThinkPHP视图模型实现二级嵌套评论的查询
  10. OpenOffice源代码编译及安装
  11. 耦合器滤波器衰减器无源器件自动化测试软件系统,纳米NSAT-1000
  12. php3d建模,3d建模师容易找工作吗
  13. matlab如何模拟数字舵机,模拟舵机和数字舵机区别
  14. python项目根目录是在哪_python,_python如何获取当前工程根目录,python - phpStudy
  15. 2021年全球起酥油收入大约4171.6百万美元,预计2028年达到5052.7百万美元,2022至2028期间,年复合增长率CAGR为 2.8%
  16. html文件做屏保win10,给Win10系统设置一个漂亮屏保的三种方法(图文)
  17. Java笔记:面向对象3大特性
  18. “不裁员的微软” 裁员了!网上哀嚎一片!
  19. Selenium Chrome设置代理之后验证依旧是本机ip原因
  20. 【Unity】刮刮乐效果(擦除图片像素值)

热门文章

  1. linux内核剖析---Linux系统调用详解(实现机制分析)
  2. qsql 关联_怎样在Qt下连接读写sqlite数据库
  3. python实现简单的办公自动化
  4. 深度讲解TS:这样学TS,迟早进大厂系列全集
  5. Python网络编程之二:网络编程基础
  6. 使用kotlin一些问题总结
  7. Python之Paramiko、前端之html学习_Day14
  8. 一款不错的java web网络相册管理系统
  9. 论文笔记 - Q-Leach:用于无线传感器网络的基于节能群集的路由协议
  10. 为什么DDoS攻击难以预防