vue项目利用webpack进行优化案例
使用 Webpack 优化 Vue 项目是提升性能和减少打包体积的关键步骤。以下是几个常见的优化案例及其详细实现方法:
1. 优化打包大小
1.1 按需加载 (Lazy Loading)
Vue 提供了路由懒加载功能,可以将组件拆分成独立的块,按需加载,从而减少初始包的体积。
实现方法:
// 原始路由定义方式
import Home from './views/Home.vue';
import About from './views/About.vue';const routes = [{ path: '/', component: Home },{ path: '/about', component: About },
];// 使用懒加载
const routes = [{ path: '/', component: () => import('./views/Home.vue') },{ path: '/about', component: () => import('./views/About.vue') },
];
Webpack 会根据 import()
语法动态生成单独的文件块。
1.2 提取公共代码
使用 Webpack 的 splitChunks
提取第三方依赖库和公共模块,避免重复加载。
配置方法(在 webpack.config.js
中):
module.exports = {optimization: {splitChunks: {chunks: 'all',cacheGroups: {vendors: {test: /[\\/]node_modules[\\/]/,name: 'vendors',chunks: 'all',},common: {test: /[\\/]src[\\/]components[\\/]/,name: 'common',chunks: 'all',},},},},
};
2. 优化构建速度
2.1 开启多线程构建
使用 thread-loader
开启多线程编译,提高构建速度。
安装依赖:
npm install thread-loader --save-dev
配置方法:
module.exports = {module: {rules: [{test: /\.js$/,use: [{loader: 'thread-loader',options: {workers: 2, // 开启两个线程},},'babel-loader',],exclude: /node_modules/,},],},
};
2.2 使用缓存
利用 cache-loader
和 babel-loader
的缓存功能,加速二次构建。
安装依赖:
npm install cache-loader --save-dev
配置方法:
module.exports = {module: {rules: [{test: /\.vue$/,use: ['cache-loader','vue-loader',],},{test: /\.js$/,use: ['cache-loader','babel-loader',],exclude: /node_modules/,},],},
};
3. 减少无用代码
3.1 Tree Shaking
通过 Tree Shaking 去除未使用的模块。Webpack 默认支持 ES6 模块语法的 Tree Shaking,但需要确保代码使用 import
/export
。
优化步骤:
- 使用
production
模式打包。 - 确保
package.json
中的库支持模块化。 - 清理未使用的代码和依赖。
3.2 按需引入 UI 库
如果项目中使用了 UI 库(如 Element Plus、Ant Design Vue),按需引入可以显著减小打包体积。
以 Element Plus 为例:
安装按需加载工具:
npm install babel-plugin-import --save-dev
配置方法(在 babel.config.js
中):
module.exports = {plugins: [['import',{libraryName: 'element-plus',customStyleName: (name) => {return `element-plus/es/components/${name}/style/css`;},},],],
};
在代码中按需引入组件:
import { ElButton, ElInput } from 'element-plus';
4. 使用现代化工具
4.1 压缩 CSS 和 JS
- CSS 压缩:使用
css-minimizer-webpack-plugin
。 - JS 压缩:使用 Webpack 内置的
terser-webpack-plugin
。
安装依赖:
npm install css-minimizer-webpack-plugin terser-webpack-plugin --save-dev
配置方法:
const CssMinimizerPlugin = require('css-minimizer-webpack-plugin');
const TerserPlugin = require('terser-webpack-plugin');module.exports = {optimization: {minimize: true,minimizer: [new TerserPlugin(),new CssMinimizerPlugin(),],},
};
4.2 使用 Vue CLI 内置优化
如果项目是通过 Vue CLI 创建的,可以直接使用内置配置进行优化。
生产模式的优化:
vue-cli-service build --modern
自定义配置:
在 vue.config.js
中:
module.exports = {productionSourceMap: false, // 关闭 SourceMapconfigureWebpack: {optimization: {splitChunks: {chunks: 'all',},},},
};
5. 使用 CDN 引入第三方库
将 Vue
、Vuex
、Vue Router
等常用依赖通过 CDN 加载,减少打包体积。
在 vue.config.js
中配置 externals:
module.exports = {configureWebpack: {externals: {vue: 'Vue','vue-router': 'VueRouter',vuex: 'Vuex',},},
};
在 index.html
中引入 CDN:
<script src="https://unpkg.com/vue@3.2.47/dist/vue.global.prod.js"></script>
<script src="https://unpkg.com/vue-router@4.1.5/dist/vue-router.global.prod.js"></script>
<script src="https://unpkg.com/vuex@4.1.0/dist/vuex.global.prod.js"></script>
总结
通过以上优化方法,Vue 项目的性能和打包体积可以显著提升。实际项目中可以根据需要灵活组合这些优化技巧,尤其是:
- 懒加载和按需引入减少初始加载体积。
- 使用 CDN 和 Tree Shaking 去除无用代码。
- 开启缓存、多线程编译加速开发构建过程。
每个项目的需求和场景可能不同,建议结合实际情况调整优化策略。
相关文章:
vue项目利用webpack进行优化案例
使用 Webpack 优化 Vue 项目是提升性能和减少打包体积的关键步骤。以下是几个常见的优化案例及其详细实现方法: 1. 优化打包大小 1.1 按需加载 (Lazy Loading) Vue 提供了路由懒加载功能,可以将组件拆分成独立的块,按需加载,从而…...

如何单独安装 MATLAB 工具箱
很多时候由于 MATLAB 太大而选择安装一些 Toolbox,但用着用着发现要用到某个没有安装的 Toolbox,这时候就需要再单独安装这个 Toolbox,下面提供两种方法。 本文以安装 系统辨识工具箱 System Identification Toolbox 为例。 方法一…...

组网实训实现
小型单元网络实现 IP划分: 外网:172.1.1.0/24 172.1.2.0/24 内网:基于192.168.3.0/24的子网划分 综合办公楼:192.168.3.00 000000 /26(192.168.3.0-192.168.3.63) 综合一楼:192.168.3.0000 0000 /28&…...
openbmc sdk09.03 适配(一)
1.说明 本节是根据最新的sdk09.03适配ast2600平台。 sdk下载路径为: https://github.com/AspeedTech-BMC/openbmc可参阅文档: https://blog.csdn.net/wit_yuan/article/details/144613247nfs挂载方法: # mount -o nolock -t nfs serverip:/xx...
SQL使用存储过程
本文介绍什么是存储过程,为什么要使用存储过程,如何使用存储过程,以及创建和使用存储过程的基本语法。 1. 存储过程 迄今为止,我们使用的大多数SQL语句都是针对一个或多个表的单条语句。并非所有操作都这么简单,经常…...

C语言----函数、指针、数组
目录 编辑 指针函数 本质 格式: 函数指针 1、 概念 2、 格式 3、 举例 3.1基本用法 3.2函数指针作为函数参数的用法(回调函数) 函数指针数组 1. 概念 2. 格式 3. 例子 指针函数 本质 是函数,返回值为指针 格式: 数据类型…...

基于Java的敬老院管理系统的设计和实现【源码+文档+部署讲解】
基于Java的敬老院管理系统设计和实现 摘 要 新世纪以来,互联网与计算机技术的快速发展,我国也迈进网络化、集成化的信息大数据时代。对于大众而言,单机应用早已成为过去,传统模式早已满足不了当下办公生活等多种领域的需求,在一台电脑上不联网的软件少之又少&#x…...

12306分流抢票软件 bypass v1.16.43 绿色版(春节自动抢票工具)
软件介绍 12306Bypass分流抢票软件,易操作强大的12306抢票软件,全程自动抢票,云识别验证码打码,多线程秒单、稳定捡漏,支持抢候补票、抢到票自动付款,支持多天、多车次、多席别、多乘客、短信提醒等功能。…...

【数据仓库】hadoop3.3.6 安装配置
文章目录 概述下载解压安装伪分布式模式配置hdfs配置hadoop-env.shssh免密登录模式设置初始化HDFS启动hdfs配置yarn启动yarn 概述 该文档是基于hadoop3.2.2版本升级到hadoop3.3.6版本,所以有些配置,是可以不用做的,下面仅记录新增操作&#…...

小试牛刀-SpringBoot集成SOL链
目录 一、什么是solanaj? 二、Pom依赖 三、主要类 3.1 RpcClient 3.2 PublicKey 3.3 Transaction 3.4 TransactionInstruction 四、示例代码 Welcome to Code Blocks blog 本篇文章主要介绍了 [小试牛刀-SpringBoot集成SOL链] ❤博主广交技术好友,喜欢文章的…...
批量插入报错: No value specified for parameter
先上代码和xml文件: 错误: ### Cause: java.sql.SQLException: No value specified for parameter 9 ; bad SQL grammar []; nested exception is java.sql.SQLException: No value specified for parameter 9代码: List<HwcListingData> theList new ArrayList<&g…...
VSCode设置ctrl或alt+mouse(left)跳转
总结: (1)VSCode初次远程连接服务器时,需要在服务器上下载 python 拓展,然后选择对应的环境 (2)VSCode设置ctrl或altmouse(left)跳转到定义...

Crosslink-NX应用连载(12):如何复用特殊功能管脚
作者:Hello,Panda 大家早上好。 昨天有朋友私信我,如何复用Crosslink-NX的特殊功能引脚如PROGRAMN、DONE、INITN诸如这些。熊猫君在这里简单介绍下: 以LIFCL-33U-8CTG104C为例,我们建立一个简单的指示灯LED周期闪烁的工程&…...
‘元素.style.样式名‘获取不到样式,应该使用Window.getComputedStyle()获取正真的样式
一、问题描述 有一次,想通过js获取一个元素的样式的某个属性状态而去执行不同的逻辑代码,结果发现获取的样式总是不对,基本为空。(通过元素.style.样式名的方式去获取。) 通过打印发现,所有的属性均存在&…...

双目视觉:reprojectImageTo3D函数
前言 reprojectImageTo3D 是 OpenCV 中用于从视差图生成三维点云的函数。它的原理是利用视差图和相机的校准参数,通过三角测量法,计算每个像素对应的三维坐标。以下内容根据源码分析所写,觉得可以的话,点赞收藏哈!&am…...

Arduino Uno简介与使用方法
目录 一、Arduino Uno概述 1. 硬件特性 2. 开发环境 二、Arduino Uno的基本使用方法 1. 硬件连接 2. 软件编程 三、Arduino Uno编程基础 1. 基本语法 2. 常用函数 四、Arduino Uno应用举例 1. LED闪烁 2. 温度检测 3. 超声波测距 五、Arduino Uno的扩展与应用 1…...
深入了解 StarRocks 表类型:解锁高效数据分析的密码
在当今数字化浪潮下,大数据分析成为企业决策、优化业务流程的关键利器。StarRocks 作为一款备受瞩目的高性能分析型数据库,其多样化的表类型为复杂的数据处理需求提供了精准解决方案。今天,就让我们一同深入探索 StarRocks 中的主键表、明细表…...

L27.【LeetCode笔记】2 的幂(五种解法)
目录 1.题目 2.自解 方法1:调用log函数 代码 提交结果 方法2:循环 提交结果 3.优解 方法3:位运算n & (n-1) 0 代码 提交结果 方法4:位运算lowbit 代码 提交结果 4.投机取巧的方法 代码 提交结果 1.题目 https://leetcode.cn/problems/power-of-two/?env…...

Pentaho Kettle迁移至Oracle的空字符串和NULL的问题处理,大坑!
一、问题说明 在使用 Kettle 将 DB2 数据迁移到 Oracle 的过程中,出现了 DB2 中为空字符串的字段,在插入到 Oracle 过程中实际插入的为 NULL ,导致触发了非空校验而迁移失败 空字符串 ‘’ ,即长度为0的字符串 搜索该问题后得知…...

「Mac畅玩鸿蒙与硬件50」UI互动应用篇27 - 水果掉落小游戏
本篇教程将带你实现一个水果掉落小游戏,掌握基本的动态交互逻辑和鸿蒙组件的使用,进一步了解事件处理与状态管理。 关键词 UI互动应用水果掉落状态管理动态交互游戏开发 一、功能说明 水果掉落小游戏包含以下交互功能: 随机生成水果&#…...
【杂谈】-递归进化:人工智能的自我改进与监管挑战
递归进化:人工智能的自我改进与监管挑战 文章目录 递归进化:人工智能的自我改进与监管挑战1、自我改进型人工智能的崛起2、人工智能如何挑战人类监管?3、确保人工智能受控的策略4、人类在人工智能发展中的角色5、平衡自主性与控制力6、总结与…...

Unity3D中Gfx.WaitForPresent优化方案
前言 在Unity中,Gfx.WaitForPresent占用CPU过高通常表示主线程在等待GPU完成渲染(即CPU被阻塞),这表明存在GPU瓶颈或垂直同步/帧率设置问题。以下是系统的优化方案: 对惹,这里有一个游戏开发交流小组&…...

Swift 协议扩展精进之路:解决 CoreData 托管实体子类的类型不匹配问题(下)
概述 在 Swift 开发语言中,各位秃头小码农们可以充分利用语法本身所带来的便利去劈荆斩棘。我们还可以恣意利用泛型、协议关联类型和协议扩展来进一步简化和优化我们复杂的代码需求。 不过,在涉及到多个子类派生于基类进行多态模拟的场景下,…...
Qt Widget类解析与代码注释
#include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this); }Widget::~Widget() {delete ui; }//解释这串代码,写上注释 当然可以!这段代码是 Qt …...

CentOS下的分布式内存计算Spark环境部署
一、Spark 核心架构与应用场景 1.1 分布式计算引擎的核心优势 Spark 是基于内存的分布式计算框架,相比 MapReduce 具有以下核心优势: 内存计算:数据可常驻内存,迭代计算性能提升 10-100 倍(文档段落:3-79…...
Java求职者面试指南:Spring、Spring Boot、MyBatis框架与计算机基础问题解析
Java求职者面试指南:Spring、Spring Boot、MyBatis框架与计算机基础问题解析 一、第一轮提问(基础概念问题) 1. 请解释Spring框架的核心容器是什么?它在Spring中起到什么作用? Spring框架的核心容器是IoC容器&#…...

20个超级好用的 CSS 动画库
分享 20 个最佳 CSS 动画库。 它们中的大多数将生成纯 CSS 代码,而不需要任何外部库。 1.Animate.css 一个开箱即用型的跨浏览器动画库,可供你在项目中使用。 2.Magic Animations CSS3 一组简单的动画,可以包含在你的网页或应用项目中。 3.An…...

基于SpringBoot在线拍卖系统的设计和实现
摘 要 随着社会的发展,社会的各行各业都在利用信息化时代的优势。计算机的优势和普及使得各种信息系统的开发成为必需。 在线拍卖系统,主要的模块包括管理员;首页、个人中心、用户管理、商品类型管理、拍卖商品管理、历史竞拍管理、竞拍订单…...
Webpack性能优化:构建速度与体积优化策略
一、构建速度优化 1、升级Webpack和Node.js 优化效果:Webpack 4比Webpack 3构建时间降低60%-98%。原因: V8引擎优化(for of替代forEach、Map/Set替代Object)。默认使用更快的md4哈希算法。AST直接从Loa…...
MySQL 主从同步异常处理
阅读原文:https://www.xiaozaoshu.top/articles/mysql-m-s-update-pk MySQL 做双主,遇到的这个错误: Could not execute Update_rows event on table ... Error_code: 1032是 MySQL 主从复制时的经典错误之一,通常表示ÿ…...