vue项目部署后页面加载首次很慢的优化方案
参考:
vue项目首次加载特别慢需要怎么配置?
1.看看你的依赖包是不是全局引入的,改为组件内按需引入,可大大降低加载时长。或者将组件引入方式改为cdn引入。需要注意的是,两种引入方式不能共存。
2.看network,点击ALL,看看哪些文件加载时间长,针对性的优化,静态文件压缩、js文件切片等
3.使用compression-webpack-plugin插件,修改配置文件,production环境下对超过10k的文件进行压缩,nginx部署时开启gzip
Vue项目部署后页面加载首次很慢的优化方案
发布前端项目时因chunk-vendors过大导致首屏加载太慢,Vue Build时chunk-vendors的优化方案
webpack Vue前端项目打包后生成的chunk-vendors文件过大,导致加载太慢,生成的js文件过多,http请求太频繁问题解决
vue项目打包优化之-productionSourceMap设置
Vue-cli3 项目配置 Vue.config.js
vue之解析vue.config.js中的配置项之publicPath
Vue runtime-compiler与runtime-only
vue-router路由懒加载(解决vue项目首次加载慢)
像vue这种单页面应用,如果没有应用懒加载,运用webpack打包后的文件将会异常的大,造成进入首页时,需要加载的内容过多,时间过长,会出啊先长时间的白屏,即使做了loading也是不利于用户体验,而运用懒加载则可以将页面进行划分,需要的时候加载页面,可以有效的分担首页所承担的加载压力,减少首页加载用时
Vue CLI3 开启gzip压缩
Nginx开启Gzip详解
按需引入element-ui
src\main.js
// 按需引入element-ui
import "./plugins/element"
// 全局引入
// Vue.use(Element)
src\plugins\element.js
import Vue from "vue"
import {
Button, Avatar, Link, Divider, Timeline, TimelineItem, Card, Pagination,
Container, Main, Header, Form, FormItem, Input, MessageBox
} from "element-ui"
Vue.use(Button)
Vue.use(Avatar)
Vue.use(Link)
Vue.use(Divider)
Vue.use(Timeline)
Vue.use(TimelineItem)
Vue.use(Card)
Vue.use(Pagination)
Vue.use(Container)
Vue.use(Main)
Vue.use(Header)
Vue.use(Form)
Vue.use(FormItem)
Vue.use(Input)
// 踩坑了, 我以为是Alert组件
Vue.prototype.$alert = MessageBox
重新构建一下
npm run build
发现好像并没什么卵用,静态文件还是那么大。

关闭生成sourceMap文件
source map 直译过来就是资源地图。所以,source map的作用就是定位。source map定位的时浏览器控制台输出语句在项目文件的位置。
编辑项目根路径下vue.config.js文件,将productionSourceMap设置为false
module.exports = {
// 部署应用包时的基本URL, 默认"/", 示例http://localhost:80/index
// 若改为/app, http://localhost:80/app/index
publicPath: "/",
// 输出文件目录
outputDir: 'dist',
// eslint-loader是否在保存的时候检查
lintOnSave: false,
// 生产环境是否生成 sourceMap 文件
productionSourceMap: false,
// 从main.js看本项目应该是runtime-only, "render: h => h(App)"
// runtimeCompiler: false,
}
重新构建一下
npm run build
小了!dist小了好多~
路由懒加载
src\router\index.js
把路由都改成懒加载
const routes = [
{
path: '/',
name: 'Index',
// 我猜通过name跳转路由会经过Blogs的懒加载
redirect: {name: "Blogs"} // 或者redirect: Blogs
// redirect: resolve => require(["../views/Blogs"], resolve) // error, redirect不能指向懒加载
},
{
path: '/blogs',
name: 'Blogs',
// component: Blogs
// 路由懒加载
component: resolve => require(["../views/Blogs"], resolve)
},
{
path: '/login',
name: 'Login',
// component: Login
component: resolve => require(["../views/Login"], resolve)
},
{
path: '/blog/add',
name: 'BlogAdd',
// component: BlogEdit,
component: resolve => require(["../views/BlogEdit"], resolve),
meta: {
requireAuth: true
}
},
{
path: '/blog/:blogId',
name: 'BlogDetail',
// component: BlogDetail,
component: resolve => require(["../views/BlogDetail"], resolve)
},
{
path: '/blog/:blogId/edit',
name: 'BlogEdit',
// component: BlogEdit,
component: resolve => require(["../views/BlogEdit"], resolve),
meta: {
requireAuth: true
}
}
]
使用gzip压缩
安装gz打包插件 compression-webpack-plugin
# npm i -D compression-webpack-plugin
npm install --save-dev compression-webpack-plugin
修改项目根路径下vue.config.js
// 导入compression-webpack-plugin
const CompressionWebpackPlugin = require("compression-webpack-plugin")
// 定义压缩文件类型
const productionGzipExtensions = ["js", "css"]
module.exports = {
// 添加Webpack配置
configureWebpack: config => {
return {
plugins: [
new CompressionWebpackPlugin({
algorithm: "gzip",
// 匹配文件名
test: new RegExp("\\.(" + productionGzipExtensions.join("|") + ")$"),
// 对超过10K的数据进行压缩
threshold: 10240,
// 是否删除原文件
deleteOriginalAssets: false,
minRatio: 0.8
})
]
}
}
}
修改nginx配置,打开gzip
在server下添加
# 开启gzip
gzip on;
# 启用gzip压缩的最小文件,小于设置值的文件将不会压缩
gzip_min_length 1k;
# 设置压缩所需要的缓冲区大小
gzip_buffers 16 64k;
# 设置gzip压缩针对的HTTP协议版本
gzip_http_version 1.1;
# gzip 压缩级别,1-9,数字越大压缩的越好,也越占用CPU时间
gzip_comp_level 9;
gzip_types text/plain application/x-javascript application/javascript text/javascript text/css application/xml application/x-httpd-php image/jpeg image/gif image/png;
# 是否在http header中添加Vary: Accept-Encoding,建议开启
gzip_vary on;
# 禁用IE6 gzip
gzip_disable "MSIE [1-6]\.";
或者执行
cp /etc/nginx/conf.d/default.conf /etc/nginx/conf.d/default.conf_bak && cat >> /etc/nginx/conf.d/default.conf <<EOF
gzip on;
gzip_min_length 1k;
gzip_buffers 16 64k;
gzip_http_version 1.1;
gzip_comp_level 9;
gzip_types text/plain application/x-javascript application/javascript text/javascript text/css application/xml application/x-httpd-php image/jpeg image/gif image/png;
gzip_vary on;
gzip_disable "MSIE [1-6]\.";
EOF
重新加载nginx配置
nginx -s reload
访问项目,网络中检查是否成功开启gzip

vue项目部署后页面加载首次很慢的优化方案的更多相关文章
- django部署后样式加载不出来解决方案
django部署后样式加载不出来 1.html文件去掉<!DOCTYPE html> 2. location /static { alias /home/static/; } 3.STAT ...
- web页面加载速度缓慢,如何优化?
参考博客: https://www.cnblogs.com/xp796/p/5236945.html https://www.cnblogs.com/MarcoHan/p/5295398.html - ...
- Vue编写的页面部署到springboot网站项目中出现页面加载不全问题
问题描述: 在用Vue脚手架 编写出一个页面之后, 部署到后台项目中, 因为做的是一个页面 按理来说 怎么都能够在服务器上运行 , 我也在自己的node环境测试 , 在同学的springboot上运行 ...
- Vue2 框架开发的单页程序页面首次加载慢的原因与优化方案
在用Vue2 框架进行单页面开发时,开发完成后项目打包到线上环境,发现vendor脚本有963K,app.css文件也有四百多k,用户第一次打开网页加载这两个文件要十多秒,会使页面白屏十多秒,之后再次 ...
- vue案例 - vuex+sessionstorage解决vue项目刷新后页面空白/数据丢失
第一部分 SessionStorage 首先查看sessionStorage的地方在控制台的 Application > Storage > Session Storage这里: 根据se ...
- ThinkCMF项目部署出现无法加载数据库驱动解决方案
最近有个TP项目刚从从本地部署到阿里云服务器上,出现了无法加载数据库驱动的错误,提示 :( 无法加载数据库驱动: Think\Db\Driver 这里分享一下出现该错误的解决步骤: 首先记得项目部署到 ...
- vue项目实现按需加载的3种方式:vue异步组件技术、es提案的import()、webpack提供的require.ensure()
1. vue异步组件技术 vue-router配置路由,使用vue的异步组件技术,可以实现按需加载. 但是,这种情况下一个组件生成一个js文件. 举例如下: { path: '/promisedemo ...
- vue项目实现按需加载的3种方式
vue异步组件技术 vue-router配置路由,使用vue的异步组件技术,可以实现按需加载.这种方式下一个组件生成一个js文件 用例: { path: '/promisedemo', name: ' ...
- vue项目上滑滚动加载更多&下拉刷新
上滑滚动时获取内容高度.屏幕高度和滚动高度(此处#sslist要为内容是id) 内容高度 let innerHeight = document.querySelector("#sslist ...
- vue项目 h5上拉加载(分页功能)
<template> <div class="receivable"> <div class="application-header fle ...
随机推荐
- vue-图书管理系统
/* 路由模块 */ const express = require('express'); const router = express.Router(); const service = requ ...
- 城市间最短路径问题——R和Rcpp实现
这里的最短路径问题也叫做相识问题,具体问题来自 https://www.math.pku.edu.cn/teachers/lidf/docs/Rbook/html/_Rbook/examples.ht ...
- 吴恩达老师机器学习课程chapter02——分类
吴恩达老师机器学习课程chapter02--分类 本文是非计算机专业新手的自学笔记,高手勿喷,欢迎指正与其他任何合理交流. 本文仅作速查备忘之用,对应吴恩达(AndrewNg)老师的机器学期课程第六章 ...
- Jquery 如何替换html字符串中标签属性值 ??
如何利用JQuery 替换HTML字符串中的属性值呢? 如 html 字符串有很多 img标签,现在需要修改 img的src值 var html="<div style="t ...
- nacos原理
配置中心原理 1.Nacos 客户端使用长轮询请求客户端变更数据,并且设置30s超时,当配置发生变化响应会立即返回,否则一直等到29.5s之后再返回响应. 2.客户端的请求到达服务端后,服务端将该请求 ...
- vue provide inject 方法
上级组件: provide() { return { changeSelectOptions: this.changeSelectOptions, switchTabs: () => this. ...
- vue引入swiper的报错以及swiper在vue中的交互事件处理
安装遇到找不到 css的问题,百度查了一些帖子也不行,可能是swiper 升级6.0后的一些变化导致 安装成功的帖子:转载于:https://www.jianshu.com/p/0150d2ee109 ...
- 在Tomcat中部署Web项目的操作方法(必看篇)
在这里介绍在Tomcat中部署web项目的三种方式: 1.部署解包的webapp目录 2.打包的war文件 3.Manager Web应用程序 一:部署解包的webapp目录 将Web项目部署到Tom ...
- iClock数据服务器默认账号密码
网络空间资产搜索: shodan 搜索 默认密码 admin/a***n End!!!
- word常用快捷键
输入公式:Alt + = 小写转大写:Shift + F3 \double{R}是实数符号