jeecg-boot首页加载速度优化全过程

news2025/2/26 5:42:22

优化结果

前端和后端部署在轻量服务器:
在这里插入图片描述
以下结果都是三次强刷得到的

优化前:
在这里插入图片描述在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
优化后:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

优化方案

开启Nginx压缩

方案来自于:jeecg官方文档

作用:通过nginx内置的压缩策略来压缩静态资源,提升资源请求速度

在nginx.conf 的 http 中加入以下片断:

    # gzip config
    gzip on;#开启压缩
    gzip_min_length 1k;#低于1k的不压缩
    gzip_comp_level 9;#压缩程度
    gzip_types text/plain application/javascript application/x-javascript text/css application/xml text/javascript application/x-httpd-php image/jpeg image/gif image/png;#对哪些mine资源开启Gzip压缩功能
    gzip_vary on;#是否在响应报文首部插入“Vary: Accept-Encoding”
    gzip_disable "MSIE [1-6]\.";#针对不同种类客户端发起的请求,选择性地关闭Gzip功能,这里意思是禁用IE6 gzip功能

在这里插入图片描述

效果显著:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

移除不需要的库

ant-design-vue-jeecg关于首页加载过慢的优化小结

目的:减小体积,加快加载速度

打包前先在build后面加 --report
在这里插入图片描述
打包后会在dist文件夹生成report.html
在这里插入图片描述
打开可以看见包的大小,其中antd-online-mini部分最大,而目前项目中用不到,所以把它移除,减小包体积
在这里插入图片描述

在这里插入图片描述

移除步骤

  1. package.json中删除依赖项
    在这里插入图片描述
  2. main.js删除引用部分
    在这里插入图片描述
  3. utils.js删除import部分和条件判断
    在这里插入图片描述
    在这里插入图片描述
  4. 删除node_modules,重新yarn installyarn run build打包
    antd-online-mini不在了,体积从11.14MB降到9.67MB
    在这里插入图片描述
    在这里插入图片描述
    结果:
    需要加载的资源从9.4MB降到7.8MB,加载时间也减少了1~2秒
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

Icon图标库按需加载

JeecgBoot实战 - 按需加载方案

按需加载

相关文件项目也已经配置好了👇
在这里插入图片描述

需要修改vue.config.js:

新增.set('@ant-design/icons/lib/dist$',resolve("src/icons.js"))

在这里插入图片描述
体积从9.67MB降到9.2MB
在这里插入图片描述
需要加载的资源从7.8MB降到7.3MB,load时间没大变化:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

移除prefetch

解决webpack打包后chunk.js 数量过多,影响加载速度问题(Jeecg)

Prefetch

作用: prefetch是一种 resource hint,用来告诉浏览器在页面加载完成后,利用空闲时间提前获取用户未来可能会访问的内容。移除 prefetch避免加载多余的资源

在vue.config.js加上config.plugins.delete('prefetch')
在这里插入图片描述
结果:
有点改善
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

打包移除sourceMap,生产环境取消console.log,开启js/css压缩

作用: 精简文件

  • 移除sourceMap:SourceMap用来作为源代码和编译代码之间的映射,方便开发定位问题,一般在压缩 js 的过程中,会生成相应的 sourcemap 文件,并且在压缩的 js 文件末尾追加 sourcemap 文件的链接 ,如://#sourceMappingURL=xxxx.js.map。这样,浏览器在加载这个压缩 过的js 时,就知道还有一个相应的 sourcemap 文件,也会一起加载下来,运行的过程中如果 js 报错,也会给出相应源代码的行号与列号,而非压缩文件的
  • 生产环境取消console.log:没啥好解释的,字面意思
  • 开启js/css压缩:JS和CSS经过压缩之后体积变小,即文件占用内存变小。在访问网站的时候要加载JS和CSS,体积越小,加载越快。网站打开的速度也就越快,有利于用户体验

jeecg-boot项目都已经配置好了
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

合并打包

解决webpack打包后chunk.js 数量过多,影响加载速度问题(Jeecg)

LimitChunkCountPlugin

作用: 解决打包后chunk.js文件过多问题

编写代码时,可能已经添加了许多代码拆分点,以便按需加载内容。在编译之后,可能会注意到一些块太小,从而造成更大的HTTP开销。用LimitChunkCountPlugin合并块对块进行后期处理

//vue.config.js添加以下内容
const webpack = require('webpack')
// 限制打包的个数(减少打包生成的js文件和css文件)
//在合并chunk时,webpack会尝试识别出具有重复模块的chunk,并优先进行合并。任何模块都不会被合并到entry chunk中,以免影响初始页面加载时间
//maxChunks:使用大于或等于 1 的值,来限制 chunk 的最大数量。使用 1 防止添加任何其他额外的 chunk,这是因为 entry/main chunk 也会包含在计数之中。
//minChunkSize: 设置 chunk 的最小大小。
minChunkSize: 设置 chunk 的最小大小。
config.plugin('chunkPlugin').use(webpack.optimize.LimitChunkCountPlugin, [{
        maxChunks: 5, 
        minChunkSize: 10000
}])

在这里插入图片描述
在这里插入图片描述
体积从9.2MB降到7.51MB
在这里插入图片描述

结果:
请求数量从330降到17,load时间也缩短了一点,不过资源大了
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

Moment库语言配置文件按需加载

webpack 按需加载momentjs 语言包

作用: momentjs因为包括很多语言包,所以体积较大,现在只保留中文语言包,减少体积

修改vue.config.js

//只保留中文语言包
config.plugin('ContextReplacementPlugin').use(webpack.ContextReplacementPlugin, [/moment[/\\]locale$/, /zh-cn/])

在这里插入图片描述
之前打包的里面有各种语言包:
在这里插入图片描述

现在:
在这里插入图片描述
结果:
感觉效果不明显
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

CDN加速

作用:CDN是在现有Internet基础上增加一层新的网络架构,通过部署边缘服务器,采用负载均衡、内容分发、调度等功能,使用户可以就近访问获取所需内容,从而解决网站拥塞情况,提高用户访问响应速度

大部分第三方库都是按需加载,我只把比较好分出来的库用cdn加速了,可能我这步做得不好

	//修改vue.config.js
     config.set('externals', {
        vue: 'Vue',
        axios: 'axios',
        'tinymce': 'tinymce'
      })

在这里插入图片描述

  //修改index.html
  <script src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.11/vue.min.js"></script>
  <script src="https://cdn.bootcdn.net/ajax/libs/axios/0.18.1/axios.min.js"></script>
  <script src="https://cdn.bootcdn.net/ajax/libs/vuex/3.5.1/vuex.min.js"></script>
  <script src="https://cdn.staticfile.org/tinymce/5.4.1/tinymce.min.js"></script>

在这里插入图片描述

//packge.json删去以下依赖
"tinymce": "5.4.1",
"axios": "^0.18.0",

在这里插入图片描述

结果:
包的体积减小了,但加载时间并没有明显减小
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

组件库(Antd)按需加载

JeecgBoot实战 - 按需加载方案

作用:按需加载可以减少网络请求,提高页面的响应速度

项目已经配置了文件👇:
在这里插入图片描述
需要做的就是改动main.js和babel.config.js,packge.json部分

main.js: 注释import Antd...Vue.use(Antd),加上import './components/lazy_antd'

在这里插入图片描述

在这里插入图片描述
babel.config.js: 加上⬇

plugins: [
    [ "import", {
      "libraryName": "ant-design-vue",
      "libraryDirectory": "es",
      "style": "css"
    } ]
  ]

在这里插入图片描述
package.json: 引入依赖babel-plugin-import

"babel-plugin-import": "^1.13.0",

在这里插入图片描述
本地运行的时候可以看到:
在这里插入图片描述
体积小了0.03MB
在这里插入图片描述

结果:
感觉没啥用
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

总结

  1. 速度优化最明显的方案就是开启Nginx压缩,能让load时间从二十多秒直接降到八秒
  2. 能让体积显著减少的方案有删除在线开发表单的库,还有让moment.js只加载中文语言包
  3. load时间挺玄学的,相同配置有时几次强刷都在三四秒附件,有时几次都在七八秒

更新

  1. 官方文档gzip压缩程度设置为最高级别9,但查阅资料发现压缩比越高越消耗CPU的资源,随着压缩比的增大的确会降低传输的带宽成本,不过发送数据前也会占用更多的CPU时间分片(说白了就是压缩比太高反而会消耗更多时间)

将9调整为6,结果如下:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/408003.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【微信小程序 | 实战开发】常用的视图容器类组件介绍和使用(1)

个人名片: 🐼作者简介:一名大二在校生,喜欢编程🎋 🐻‍❄️个人主页🥇:小新爱学习. 🐼个人WeChat:hmmwx53 🕊️系列专栏:🖼️ 零基础学Java——小白入门必备重识C语言——复习回顾

component lists rendered with v-for should have explicit keys

component lists rendered with v-for should have explicit keys 发现问题 关键报错 (Emitted value instead of an instance of Error) : component lists rendered with v-for should have explicit keys. See https://vuejs.org/guide/list.html#key for more info. 具体…

VUE之Element-ui文件上传详解

引言 对于文件上传&#xff0c;在开发主要涉及到以下两个方面&#xff1a; 单个文件上传和表单一起实现上传&#xff08;这种情况一般都是文件上传之后&#xff0c;后端返回保存在服务器的文件名&#xff0c;最后和我们的表单一起上传&#xff09; 单文件上传 element-ui中…

Cesium加载离线地图和离线地形

文章目录 前言一、Cesium加载离线地图 1.1 下载数据2.2 数据处理2.3 地图发布2.4下载速度改进 二、Cesium加载离线地形 2.1 下载数据2.2 数据处理2.3 地形发布2.4 遇到的问题 前言 直接把地图数据切片&#xff0c;然后通过nginx以静态服务方式发布。 使用工具&#xff1a;…

this.$emit使用方法【前端技术】

this.$emit()主要用于子组件向父组件传值。 下面就给大家举一个实际开发中使用到的案例。 需求&#xff1a; 点击关联项目&#xff0c;弹出关联项目数据进行选择一条数据&#xff0c;点击确定&#xff0c;项目编号会回显到关联项目中。 1新增页面 2 新增页面中点击关联项目弹出…

vue3全局自定义指令实现按钮权限控制

1. 文档介绍的全局自定义指令 在Vue的模板语法中我们除了使用&#xff1a;v-show、v-for、v-model等&#xff0c;Vue其实 也允许我们来自定义自己的指令。 1&#xff09;注意&#xff0c;在 Vue 中&#xff0c;代码复用和抽象的主要形式是组件。 2&#xff09;然而&#xff0c…

HTML+CSS实现搜索框

HTMLCSS实现搜索框&#xff1a; 需求分析&#xff1a; 1、输入框焦点事件 onfocus:成为焦点, 点击输入框的时候&#xff0c;出现闪烁光标&#xff0c;此时可以输入内容。 onblur :失去焦点, 点击页面空白区域&#xff0c;光标消失。此时不可以输入内容。 2、获取元素 3、…

vite配置@别名,以及如何让vscode智能提示路经

vite配置别名 vite.config.ts import { defineConfig } from vite import vue from vitejs/plugin-vue// 配置别名import { resolve } from "path"; // https://vitejs.dev/config/ export default defineConfig({plugins: [vue()],// ↓解析配置resolve: {// ↓路…

HTML基础之form表单

目录 一&#xff1a;表单属性 1 name 属性 2 action属性 3 method属性 4 target属性 5 enctype属性 二&#xff1a;表单对象 1 input标签 2 多行文本textarea 3 下拉列表select 4 表单控件&#xff08;元素&#xff09;button 5 表单控件&#xff08;元素&#xff…

Vuex持久化插件(vuex-persistedstate)

为什么使用持久化 目的: 让在vuex中管理的状态数据同时储存在本地。可免去自己储存的环节。 在开发的过程中&#xff0c;像用户信息&#xff08;名字&#xff0c;头像&#xff0c;token&#xff09;需要vuex中储存且需要本地储存再例如&#xff0c;购物车如果需要未登录状态下…

Router-view

我们都知道&#xff0c;路由指的是组件和路径的一种映射关系。Router-view也被称为路由的出口,今天我们就探讨下如何去使用路由出口。 也就是: 路径--------------------------------------------------------------->页面 可以把router-view理解成一类代码存放的位置。 …

vue3项目中使用three.js

vue3项目中使用three.js前言一、three.js是什么&#xff1f;二、vue3中下载与安装three.js三、操作步骤1.创建场景2.创建物体3.添加光源4.添加相机5.开始渲染四、myThree.vue源代码五、效果图1.单个模型2.多个模型总结前言 在vue3项目中&#xff0c;通过three.js使用了一段短小…

java 课程设计——银行管理系统

银行管理系统&#xff08;java&#xff09; 环境&#xff1a; idea2020 jdk1.8 能实现的功能&#xff1a; 1.注册账户 2.登录 3.查询账户信息 4.存款 5.取款 6.向另一个账户转账 7.修改账户密码 8.注销账户 项目结构 项目演示 1.主页面&#xff1a; 2.注册账号&#xff1a;…

多行文本溢出显示省略号

文本溢出显示省略号分两种情况&#xff0c;单行文本溢出显示省略号&#xff08;参考上篇文章https://blog.csdn.net/qq_43687594/article/details/123511873&#xff09;&#xff0c;另外一种就是多行文本溢出显示省略号。 多行文本显示省略号有两种办法 第一种&#xff1a; …

解决Vue刷新后页面数据丢失的问题(sessionStorage和localStorage的用法)

一、为什么刷新后数据会丢失 vuex存储的数据只是在页面中&#xff0c;相当于全局变量&#xff0c;页面刷新的时候vuex里的数据会重新初始化&#xff0c;导致数据丢失。因为vuex里的数据是保存在运行内存中的&#xff0c;当页面刷新时&#xff0c;页面会重新加载vue实例&#xf…

初识React及React开发依赖介绍

文章目录初识ReactReact介绍React特点React的依赖介绍React的开发依赖Babel和React的关系React的依赖引入初识React React介绍 React是什么呢? 相信每个做开发的人对它都或多或少有一些印象; 这里我们来看一下官方对它的解释:用于构建用户界面的 JavaScript 库; 目前对于前端…

H5页面实现微信授权登录

项目需求描述&#xff1a; 用户通过扫码海报携带活动二维码跳转到h5页面&#xff0c;并且完成微信授权&#xff0c;完成授权的用户进入小程序后不再进行授权操作。这里边涉及到了两个大问题&#xff0c;一是怎样在一个域名下部署两个项目&#xff0c;二是用户点击授权之后跳转…

vue.js not detected问题解决

最近在看vue的时候&#xff0c;发现之前装过的vuedevtools提示vue.js is not detected。重装了一次后&#xff0c;发现对于没有应用vue框架的页面&#xff0c;的确是检测不到vue.js&#xff0c;所以报这个很正常&#xff1b;切换到有vue.js资源的页面&#xff0c;调试界面就会自…

史上最详细vue的入门基础

一&#xff1a;Vue Vue&#xff1a;一种用于构建用户界面的渐进式javascript框架 Vue可以自底向上逐层的应用简单应用:只需一个轻量小巧的核心库复杂应用:可以引入各式各样的Vue插件 特定&#xff1a; 1、采用组件化模式&#xff0c;提高代码复用率&#xff0c;且让代码更好…

安装与配置webpack-dev-serve

作用 相当于在本地开启了一个服务&#xff0c;我们可以通过http网络请求访问提高了IO性能&#xff0c;因为webpack-dev-server将我们的文件编译后放到内存里面&#xff0c;以空间换时间无需我们每次都需要手动编译我们的文件&#xff0c;我们每次保存文件&#xff0c;就会自动…