avatar

十六小站

欢迎来到我的个人主页! 期待与您分享我的经验与故事,一起探索技术的无穷可能!

  • 首页
  • NAS专题
  • 关于
Home 记一次前端优化(vue2)
文章

记一次前端优化(vue2)

Posted 7 days ago Updated 5 days ago
By 十六 已删除用户
24~31 min read

由于博主所在公司的前端缺乏高端人员,导致前端代码臃肿,前端页面加载耗时基本上在min级别,于是博主决定进行一次优化 。首先贴上优化前的加载截图 ,明显可以看出 ,资源加载竟然加载了45.2MB,耗时在2.1min。

1. 引入Bundle Size检查打包体积

(1)下载依赖

npm install --save-dev webpack-bundle-analyzer

(2)引入依赖

在 vue.config.js 中添加以下内容

const BundleAnalyzerPlugin = require('webpack-bundle-analyzer').BundleAnalyzerPlugin;

module.exports = {
  configureWebpack: {
    plugins: [new BundleAnalyzerPlugin()]
  }
}

(3)进行打包

执行npm run build

(4)查看文件大小

控制台可以看出打包资源比较大的文件。

打包完成后会跳出可视化页面

2. 按需引入模块

由于小编的项目是公司的老旧项目,代码比较乱 ,这里按需引入比较耗时,这里只对echarts做了处理。

处理思路:

像下图中echart,monent,dayjs等都有优化空间。

echart如果不是报表平台,可以在需要使用的页面引入需要使用的模块 ,而不需要全包引入。

monent和dayjs功能重复,可以选择性优化。

(1)在main.js中删除echarts的引用。

(2)全局搜索并修改引用

替换为

echarts.init(xxx)

(3)局部引入

import echarts from 'echarts'

3. GZIP压缩

(1)下载依赖

npm install --save compression-webpack-plugin

(2)引入依赖

在vue.config.js

const CompressionWebpackPlugin = require('compression-webpack-plugin')

configureWebpack: {
    plugins: [new BundleAnalyzerPlugin(),
        new CompressionWebpackPlugin({
            algorithm: 'gzip',
            test: /\.(js|css|html|svg)$/,
            threshold: 10240,
            minRatio: 0.8
        }),
    ],
...
}

编译后检查dist下是否有.gz文件。

(3) 添加nginx配置

某些nginx是没有这些模块的,如果没有的话 ,启动会报错。

这时候可以选择去编译一个 ,如果是docker部署的,一般都是包含这些模块的。

gzip_static on;   # 如果有 xxx.js.gz 文件,就直接返回它
#brotli_static on; # 如果你也生成了 .br 文件的话
gzip on;
gzip_types application/javascript text/css application/json application/xml text/plain;

(4)手动编译nginx(可选)

#根据自己系统选择对应文件下载源码
https://github.com/nginx/nginx/releases

# 配置编辑
./configure  \
--prefix=$(pwd)  \
--with-http_ssl_module   \
--with-http_gzip_static_module  \
--with-http_v2_module
...添加自己需要的模块


#启动编译
make install

编译完成后即可正常访问。

(5)检查是否生效

4. 分割vendor.js

由于小编的vendor.js居然有27M之多,这里先来了解下这个文件是个什么的 。

  • chunk-vendors.js 通常存放项目里用到的第三方库代码(vendors),例如:

    • vue、vue-router、vuex

    • axios

    • 其他通过 npm install 引入的依赖

  • 它由 Webpack 的代码分割(Code Splitting) 机制自动拆分出来,避免和业务代码混在一起

由于博主分割后导致部分样式问题,所以后续没有使用分割 ,这里暂时未做记录。

5. 安装depcheck检查未使用的依赖

(1)安装依赖

npm install depcheck --save-dev

(2)在项目根目录执行

depcheck

//如果找不到命令则执行
depcheck.cmd

(3)卸载未使用的依赖

执行后可以看到输入结果

6. 再次打包

总体积较少了10M左右 ,并且拆分了大的vendor.js

由于博主的项目比较老旧,代码结构比较乱 ,目前只能暂时优化到这里 ,后续有时间再进一步优化 。

使用chrome的无痕模式加载页面可以看到效果非常显著已经从2min优化到2秒左右了

菜鸟入坑, 高手之路
前端
License:  CC BY 4.0
Share

Further Reading

Sep 6, 2025

记一次前端优化(vue2)

由于博主所在公司的前端缺乏高端人员,导致前端代码臃肿,前端页面加载耗时基本上在min级别,于是博主决定进行一次优化 。首先贴上优化前的加载截图 ,明显可以看出 ,资源加载竟然加载了45.2MB,耗时在2.1min。 1. 引入Bundle Size检查打包体积 (1)下载依赖

Apr 1, 2025

在WEB中子线程可以访问Request上下文

使用RequestContextHolder获取Request和Session对象 在JavaWeb中,可以通过RequestContextHolder类来获取当前线程的Request和Session对象。具体实现方式是先获取ServletRequestAttributes对象,再从中提取Reque

Dec 31, 2024

OpenSearch常用脚本

给数据添加属性 POST /your_index/_update_by_query { "script": { "source": "ctx._source.newField = 'new_value'", "lang": "painless" }, "query": {

OLDER

SpringBoot3.X-2(缓存Redis/memory)

NEWER

Recently Updated

  • 记一次前端优化(vue2)
  • SpringBoot3.X-2(缓存Redis/memory)
  • SpringBoot3.X-1(MP+Druid)
  • Onlyoffice编译
  • K6+Playwright实现并发测试

Trending Tags

Java Docker 前端 中间件 数据库 群晖 unraid

Contents

©2025 十六小站. Some rights reserved.

Using the Halo theme Chirpy