avatar

十六小站

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

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

记一次前端优化(vue2)

Posted 2025-09-6 Updated 2025-09- 15
By 十六 已删除用户
26~33 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秒左右了

脚本整理

对于之前存在的静态资源文件,可以使用以下命令生成可以使用的gz模块。

#!/bin/bash

# 要压缩的文件后缀列表
EXTENSIONS=("js" "css" "html" "json" "svg" "txt")

# 遍历文件
for ext in "${EXTENSIONS[@]}"; do
  find . -type f -name "*.${ext}" ! -name "*.gz" | while read -r file; do
    # 如果 gz 文件不存在或源文件比 gz 更新,就重新压缩
    if [ ! -f "${file}.gz" ] || [ "$file" -nt "${file}.gz" ]; then
      echo "Compressing: $file -> ${file}.gz"
      gzip -c -9 "$file" > "${file}.gz"
    fi
  done
done

echo "  所有文件压缩完成!"

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

Further Reading

Sep 6, 2025

记一次前端优化(vue2)

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

Apr 2, 2025

简单规则引擎

背景 在一些项目中我们需要通过用户自定义配置一些阈值逻辑进行判断是否触发阈值,例如大部分IOT项目中需要设置自动触发条件(例如:每天22:00后 且 窗帘关闭的情况下关灯)。 当然有一些成熟如规则引擎如:Drools和LiteFlow,但是这里写一款简单的java实现方案作为记录。 前端示例 以下示

Oct 27, 2024

HTML编译成应用程序

如果你想将 HTML 网页包装成 Windows 应用程序,可以使用 Electron。下面是详细步骤: 使用 Electron 创建 Windows 应用程序 1. 安装 Node.js 和 npm - 首先确保你安装了 Node.js 和 npm(Node.js 的包管理器)。你可以从 [Nod

OLDER

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

NEWER

微服务之Auth篇

Recently Updated

  • 异步通知中事务的处理
  • 线程池优化
  • KubeShpere部署(4.1.2)
  • 微服务之Auth篇
  • 记一次前端优化(vue2)

Trending Tags

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

Contents

©2025 十六小站. Some rights reserved.

Using the Halo theme Chirpy