参考:

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项目部署后页面加载首次很慢的优化方案的更多相关文章

  1. django部署后样式加载不出来解决方案

    django部署后样式加载不出来 1.html文件去掉<!DOCTYPE html> 2. location /static { alias /home/static/; } 3.STAT ...

  2. web页面加载速度缓慢,如何优化?

    参考博客: https://www.cnblogs.com/xp796/p/5236945.html https://www.cnblogs.com/MarcoHan/p/5295398.html - ...

  3. Vue编写的页面部署到springboot网站项目中出现页面加载不全问题

    问题描述: 在用Vue脚手架 编写出一个页面之后, 部署到后台项目中, 因为做的是一个页面 按理来说 怎么都能够在服务器上运行 , 我也在自己的node环境测试 , 在同学的springboot上运行 ...

  4. Vue2 框架开发的单页程序页面首次加载慢的原因与优化方案

    在用Vue2 框架进行单页面开发时,开发完成后项目打包到线上环境,发现vendor脚本有963K,app.css文件也有四百多k,用户第一次打开网页加载这两个文件要十多秒,会使页面白屏十多秒,之后再次 ...

  5. vue案例 - vuex+sessionstorage解决vue项目刷新后页面空白/数据丢失

    第一部分 SessionStorage 首先查看sessionStorage的地方在控制台的 Application > Storage > Session Storage这里: 根据se ...

  6. ThinkCMF项目部署出现无法加载数据库驱动解决方案

    最近有个TP项目刚从从本地部署到阿里云服务器上,出现了无法加载数据库驱动的错误,提示 :( 无法加载数据库驱动: Think\Db\Driver 这里分享一下出现该错误的解决步骤: 首先记得项目部署到 ...

  7. vue项目实现按需加载的3种方式:vue异步组件技术、es提案的import()、webpack提供的require.ensure()

    1. vue异步组件技术 vue-router配置路由,使用vue的异步组件技术,可以实现按需加载. 但是,这种情况下一个组件生成一个js文件. 举例如下: { path: '/promisedemo ...

  8. vue项目实现按需加载的3种方式

    vue异步组件技术 vue-router配置路由,使用vue的异步组件技术,可以实现按需加载.这种方式下一个组件生成一个js文件 用例: { path: '/promisedemo', name: ' ...

  9. vue项目上滑滚动加载更多&下拉刷新

    上滑滚动时获取内容高度.屏幕高度和滚动高度(此处#sslist要为内容是id) 内容高度  let innerHeight = document.querySelector("#sslist ...

  10. vue项目 h5上拉加载(分页功能)

    <template> <div class="receivable"> <div class="application-header fle ...

随机推荐

  1. 微信小程序级联选择器省市区选择器部分安卓手机兼容的问题:无法只选省份,必须选择到市

    代码片段: 1 <view class="item"> 2 <view class="i-name"><text class=&q ...

  2. 代码行数统计(指定目录下所有文件的Line)

    遍历文件夹计算文件行数(Windows) 主要使用的是 FindFirstFile. FindNextFile函数寻找子目录下的文件,使用 WIN32_FIND_DATA(文件属性) 结构体 #def ...

  3. struts2 显示表格

    <%@ taglib uri="/struts-tags" prefix="s"%> <h3>All Records:</h3&g ...

  4. hdrp package导入工程

    补充: 可以直接把包提出来放一个单独文件夹 然后在package manager中load from disk,跟下面手动改效果没区别 如果发现有各种引用丢失,在工程内对包reimport下 1 需要 ...

  5. MySQL之中文数据问题

    随笔记录方便自己和同路人查阅. #------------------------------------------------我是可耻的分割线--------------------------- ...

  6. 跨时钟域之异步FIFO

    参考:https://www.cnblogs.com/aslmer/p/6114216.html 文章:Simulation and Synthesis Techniques for Asynchro ...

  7. python下载文件headers

    from aiohttp import webfrom urllib.parse import quote r = web.Response()# r.content_type = 'applicat ...

  8. HttpClientFactory的一些参考资料

    依赖关系注入指南  https://docs.microsoft.com/zh-cn/dotnet/core/extensions/dependency-injection-guidelines#di ...

  9. C++实现顺序表相关操作

    //顺序表#include<iostream>#include<cstdlib>//C中stdlib.h动态分配内存using namespace std;#define OK ...

  10. VAE变分自编码器公式推导

    VAE变分推导依赖数学公式 (1)贝叶斯公式:\(p(z|x) = \frac{p(x|z)p(z)}{p(x)}\) (2)边缘概率公式:\(p(x) =\int{p(x,z)}dz\) (3)KL ...