Vue 项目文件大小优化

优化逻辑

任何优化需求,都有一个前提,即可衡量。

那 Vue 加载速度的优化需求,本质上是要降低加载静态资源的大小。

所以,优化前,需要有一个了解项目现状的资源加载大小情况。

主要分 3 步走:

  • 找到方法测量打包文件大小的方式。

  • 完成打包文件大小的测量。

  • 根据测量结果,对大文件进行针对性地优化处理。

思路捋顺后,核心就是要找到一个可测量的工具

而要测量项目运行包的各个文件大小,关键在于要测量项目打包构建后的各个文件大小。

所以测量工具插件,和打包环境密切相关。

不同的环境下,有不同的测量工具。

以下罗列了当前 Vue3 项目下常用的打包环境及包大小测量和分析插件。

Vue3 + Vite 环境

安装插件

npm install vite-plugin-compression --save-dev

配置插件

vite.config.js 文件中添加 rollup-plugin-visualizer 插件的配置,如下:

import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
import { visualizer } from 'rollup-plugin-visualizer'  // 引入 visualizer 插件export default defineConfig({plugins: [vue(),visualizer({open: true,  // 构建完成后会自动打开浏览器,显示可视化报告。如果您不想自动打开,可以设置为 false。filename: 'stats.html',  // 生成的报告文件名称,默认保存为项目根目录下的 stats.html 文件,您可以修改路径和文件名。gzipSize: true,  // 显示各文件在经过 gzip 压缩后的大小brotliSize: true  // 显示各文件在经过 brotli 压缩后的大小})],build: {rollupOptions: {output: {manualChunks(id) {if (id.includes('node_modules')) {return id.toString().split('node_modules/')[1].split('/')[0].toString();}}}}}
});

构建项目生成报告

npm run build

构建完成后,按照配置会自动生成报告 stats.html 文件。

如果配置为 open:true,则会在构建完成后自动打开报告页面。

报告示例

如上图,打包文件占比较大的主要是以下 3 个包/文件:

  • element-plus:

  • lodash.js

  • ort.min.js

所以,根据占比较大的文件去做针对性的优化即可。

Vue3 + Vue Cli 环境(Webpack打包)

安装插件

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

配置插件

vue.config.js 中引入并配置 webpack-bundle-analyzer 插件。

const { defineConfig } = require('@vue/cli-service')
const BundleAnalyzerPlugin = require('webpack-bundle-analyzer').BundleAnalyzerPlugin;module.exports = defineConfig({transpileDependencies: true,configureWebpack: {plugins: [new BundleAnalyzerPlugin({analyzerMode: 'static', // 生成静态 HTML 文件openAnalyzer: true, // 构建完成后自动打开浏览器展示报告reportFilename: 'bundle-report.html', // 报告文件名,可以自定义路径和名称}),],},
});

构建项目生成报告

在配置完成后,您可以运行以下命令构建项目,并生成报告:

npm run build

构建完成后,webpack-bundle-analyzer 会生成一个静态的 HTML 文件(默认在 dist/ 目录下,或根据 reportFilename 的配置),并自动在浏览器中打开。可以在报告中查看每个模块的体积以及其依赖关系。

报告示例

Vue3 + Rollup 环境

安装插件

npm install --save-dev rollup-plugin-visualizer

配置插件

rollup.config.js 文件中添加该插件:

import { visualizer } from 'rollup-plugin-visualizer';export default {input: 'src/main.js', // 项目的入口文件output: {file: 'dist/bundle.js', // 输出文件format: 'es',},plugins: [// 其他插件visualizer({open: true, // 构建完成后自动打开浏览器展示报告filename: 'stats.html', // 生成的报告文件名gzipSize: true, // 显示 gzip 压缩后的大小brotliSize: true // 显示 brotli 压缩后的大小})],
};

构建项目生成报告

npx rollup -c

构建完成后,按照配置会自动生成报告 stats.html 文件。

如果配置为 open:true,则会在构建完成后自动打开报告页面。

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

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

相关文章

ZYNQ使用XGPIO驱动外设模块(前半部分)

目录 目录 一、新建BD文档,添加ZYNQ处理器 1.BD文档: 2.在Vivado中,BD文件的生成过程通常包括以下步骤: 1)什么是Tcl Console: 3.PL部分是FPGA可编程逻辑部分,它提供了丰富的IO资源,可以用于实现各种硬件接口和功…

3dsMax添加天空盒

点击渲染,环境 , 点击位图 找到要设置的天空HDR,可以使用HDR(EXR)贴图 一个可以下载HDR贴图的网站 https://polyhaven.com/hdris在渲染的时候不要使用使用微软输入法,3dsmax会卡死, 在渲染的时候不要使用使用微软…

【Kubernetes】常见面试题汇总(五十九)

目录 129.问题:pod 使用 PV 后,无法访问其内容? 130.查看节点状态失败? 特别说明: 题目 1-68 属于【Kubernetes】的常规概念题,即 “ 汇总(一)~(二十二&#xf…

《向量数据库指南》 ——KG-RAG 新突破:有限跳数假设下的高效解法

我们观察到在实际的 KG-RAG 场景中,存在跳数有限性假设:在 KG-based RAG 中,实际问的 query 问题的查询路由只需要在知识图谱中进行有限的,且很少的跳数(如少于4跳)的查询,而并不需要在其中进行非常多次跳数。 我们的跳数有限性假设基于两点很重要的观察:1. query 复杂…

自然语言处理(NLP)论文数量的十年趋势:2014-2024

引言 近年来,自然语言处理(NLP)已成为人工智能(AI)和数据科学领域中的关键技术之一。随着数据规模的不断扩大和计算能力的提升,NLP技术从学术研究走向了广泛的实际应用。通过观察过去十年(2014…

基于Zabbix进行服务器运行情况监测

文章目录 引言I Zabbix主要构成下载并安装Zabbix被监控主机安装zabbix agent创建被监控主机报警设置II 常见问题cannot use database "zabbix": its "users" table is empty (is this the Zabbix proxy database?)重置 Zabbix Web 界面密码Zabbix agent i…

还做单元测试吗?

软件单元测试分为狭义的单元测试和广义的单元测试。 前者是指对被测代码的各种函数、接口等进行测试,以验证它们的功能、性能和安全性。 后者是指对页面的每一个组件(如文本框、按钮等)进行测试,以验证它们的功能、性能和安全性…

MySQL学习笔记(持续更新,目前到十一章锁)

1、Mysql概述 1.1 数据库相关概念 三个概念:数据库、数据库管理系统、SQL 名称全称简称数据库存储数据的仓库,数据是有组织的进行存储DataBase(DB)数据库管理系统操纵和管理数据库的大型软件DataBase Mangement System&#xf…

【Qt】详细Qt基础 (包括自定义控件)

目录 QT 概述创建项目项目文件(. pro)main.cppmainwindow.uimainwindow.hmainwindow.cpp 窗口类QWidget 窗口显示QDialog 窗口 QPushButton创建显示 对象树基本概念功能 坐标体系控件Item WidgetsQListWidgetQTreeWidgetQTableWidget 自定义控件 QT 概述…

AI免费文档处理在线工具:ColPali文本检索文档

1、ColPali 原理还是对比学习,图像和文本,文档通过图像模型,文本通过大模型gemma https://huggingface.co/spaces/manu/ColPali-demo 检索pdf

k8s 中存储之 PV 持久卷 与 PVC 持久卷申请

目录 1 PV 与 PVC 介绍 1.1 PersistentVolume(持久卷,简称PV) 1.2 PersistentVolumeClaim(持久卷声明,简称PVC) 1.3 使用了PV和PVC之后,工作可以得到进一步的细分: 2 持久卷实验配置…

深度0.1%调光恒流芯片SL8701支持PWM调光 模拟调光 无频闪 多路共阳

一、芯片概述 SL8701是一款内置100V MOS的降压型高调光比LED恒流驱动芯片,专为智能调光调色照明研发设计。它支持多种调光方式,包括PWM调光和模拟调光,能够实现高调光比,满足不同场景的照明需求。 二、主要特性 PWM调光支持&am…

【Vue3】 h()函数的用法

目录 介绍 参数 使用案例 1.创建虚拟 DOM 元素 2. 组件的动态渲染 3. 创建功能组件 4.渲染动态属性 5. 使用插槽 6. 创建动态标签 介绍 h() 函数用于辅助创建虚拟 DOM 节点,它是 hypescript 的简称——能生成 HTML (超文本标记语言) 的 JavaScript&#x…

Unsupervised HDR Image and Video Tone Mapping via Contrastive Learning

Abstract 捕捉高动态范围 (HDR) 图像(视频)很有吸引力,因为它可以揭示黑暗和明亮区域的细节。 由于主流屏幕仅支持低动态范围(LDR)内容,因此需要色调映射算法来压缩HDR图像(视频)的…

Python编程:创意爱心表白代码集

在寻找一种特别的方式来表达你的爱意吗?使用Python编程,你可以创造出独一无二的爱心图案,为你的表白增添一份特别的浪漫。这里为你精选了六种不同风格的爱心表白代码,让你的创意和情感通过代码展现出来。 话不多说,咱…

Collection-LinkedList源码解析

文章目录 概述LinkedList实现底层数据结构构造函数getFirst(), getLast()removeFirst(), removeLast(), remove(e), remove(index)add()addAll()clear()Positional Access 方法查找操作 概述 LinkedList同时实现了List接口和Deque接口,也就是说它既可以看作一个顺序…

Magnum IO

NVIDIA Magnum IO 文章目录 前言加速数据中心 IO 性能,随时随地助力 AINVIDIA Magnum IO 优化堆栈1. 存储 IO2. 网络 IO3. 网内计算4. IO 管理跨数据中心应用加速 IO1. 数据分析Magnum IO 库和数据分析工具2. 高性能计算Magnum IO 库和 HPC 应用3. 深度学习Magnum IO 库和深度…

ModelMapper的常见用法 ,号称是beanUtils.copyProp....的升级版??,代码复制粘贴即可复现效果,so convenient

官网案例 以下将官网案例做一个解释 1)快速入门 递归遍历源对象的属性拷贝给目标对象 拷贝对象下对象的属性值 Data class Order {private Customer customer;private Address billingAddress; }Data class Customer {private Name name; }Data class Name {pr…

【笔记】自动驾驶预测与决策规划_Part5_决策过程(上)

决策过程 0. 前言1.决策过程的引入1.1有了planning,为什么还需要decision-making?1.2 决策规划的一些思考 2.马尔可夫决策过程及其关键要素2.1 马尔可夫过程2.1.1 什么是随机过程?2.1.2 什么是马尔科夫性?2.1.3 马尔可夫决策过程 …

单片机(学习)2024.10.11

目录 按键 按键原理 按键消抖 1.延时消抖 2.抬手检测 通信 1.通信是什么 2.电平信号和差分信号 3.通信的分类 (1)时钟信号划分 同步通信 异步通信 (2)通信方式划分 串行通信 并行通信 (3)通信方向划分 单工 半双工 全双工 4.USART和UART(串口通信&a…