「vue3-element-admin」基于 TypeScript 的 ECharts 按需引入方案实战 - Vue3 项目打包体积优化 57%

🚀 作者主页: 有来技术
🔥 开源项目: youlai-mall ︱vue3-element-admin︱youlai-boot︱vue-uniapp-template
🌺 仓库主页: GitCode︱ Gitee ︱ Github
💖 欢迎点赞 👍 收藏 ⭐评论 📝 如有错误敬请纠正!

目录

    • 问题背景
    • 打包分析
    • 按需引入 ECharts
      • 安装依赖
      • 组件封装
      • 组件调用
    • 优化效果
    • 结语

问题背景

在开源项目 vue3-element-admin 后台模板中,控制台的访问趋势图表组件(VisitTrend)目前采用全量引入 ECharts 的方式,这导致打包后的文件体积较大,显示为 1 MB 以上。为了优化性能,建议采用按需引入 ECharts 的方式,从而减少打包体积,提升页面加载速度。

打包分析

使用 rollup-plugin-visualizer 进行打包分析:

pnpm add -D rollup-plugin-visualizer

Vite 配置(vite.config.ts)

import { type ConfigEnv, defineConfig } from "vite";
import { visualizer } from "rollup-plugin-visualizer";
export default defineConfig(({ mode }: ConfigEnv) => ({plugins: [visualizer({open: true, // 自动打开分析页面filename: "stats.html",gzipSize: true, // 显示gzip压缩后体积brotliSize: true })]
}));

分析结果如图:

按需引入 ECharts

安装依赖

pnpm add echarts

组件封装

封装通用组件(src/components/Echarts/index.vue), 参考 ECharts 官方文档-按需引入 ECharts 图表和组件

<!--* 基于 ECharts 的 Vue3 图表组件* 版权所有 © 2021-present 有来开源组织** 开源协议:https://opensource.org/licenses/MIT* 项目地址:https://gitee.com/youlaiorg/vue3-element-admin** 在使用时,请保留此注释,感谢您对开源的支持!--><template><div ref="chartRef" :style="{ width, height }"></div>
</template><script setup lang="ts">
// 引入 echarts 核心模块,核心模块提供了 echarts 使用必须要的接口。
import * as echarts from "echarts/core";
// 引入柱状、折线和饼图常用图表
import { BarChart, LineChart, PieChart } from "echarts/charts";
// 引入标题,提示框,直角坐标系,数据集,内置数据转换器组件,
import { GridComponent, TooltipComponent, LegendComponent } from "echarts/components";
// 引入 Canvas 渲染器,注意引入 CanvasRenderer 或者 SVGRenderer 是必须的一步
import { CanvasRenderer } from "echarts/renderers";import { useResizeObserver } from "@vueuse/core";// 按需注册组件
echarts.use([CanvasRenderer,BarChart,LineChart,PieChart,GridComponent,TooltipComponent,LegendComponent,
]);const props = defineProps<{options: echarts.EChartsCoreOption;width?: string;height?: string;
}>();const chartRef = ref<HTMLDivElement | null>(null);
let chartInstance: echarts.ECharts | null = null;// 初始化图表
const initChart = () => {if (chartRef.value) {chartInstance = echarts.init(chartRef.value);if (props.options) {chartInstance.setOption(props.options);}}
};// 监听尺寸变化,自动调整
useResizeObserver(chartRef, () => {chartInstance?.resize();
});// 监听 options 变化,更新图表
watch(() => props.options,(newOptions) => {if (chartInstance && newOptions) {chartInstance.setOption(newOptions);}},{ deep: true }
);onMounted(() => {nextTick(() => initChart());
});onBeforeUnmount(() => {chartInstance?.dispose();
});
</script>

组件调用

<template><div class="dashboard-container"><ECharts :options="chartOptions" height="400px" /></div>
</template><script setup lang="ts">
import ECharts from '@/components/Echarts/index.vue'defineOptions({name: "Dashboard",inheritAttrs: false,
});const data = {dates: ["2025-02-07","2025-02-08","2025-02-09","2025-02-10","2025-02-11","2025-02-12","2025-02-13",],pvList: [5057, 4309, 1654, 4523, 3944, 3908, 5247],ipList: [446, 420, 141, 442, 430, 392, 466],
};const chartOptions = ref();
/***  初始化图表*/
const initChart = () => {chartOptions.value = {tooltip: {trigger: "axis",},legend: {data: ["浏览量(PV)", "访客数(UV)"],bottom: 0,},xAxis: {type: "category",data: data.dates,},yAxis: {type: "value",splitLine: {show: true,lineStyle: {type: "dashed",},},},series: [{name: "浏览量(PV)",type: "line",data: data.pvList,smooth: true,itemStyle: {color: "#4080FF",},lineStyle: {color: "#4080FF",},},{name: "访客数(UV)",type: "line",data: data.ipList,smooth: true,itemStyle: {color: "#67C23A",},lineStyle: {color: "#67C23A",},},],};
};onMounted(() => {initChart();
});
</script>

最终效果如下:

优化效果

  • 体积对比
指标优化前优化后缩减率
整体打包体积4.62 MB4.13 MB10.6%
ECharts 体积2.12 MB0.92 MB57%
  • 效果截图

优化前后对比

优化前优化后

使用 rollup-plugin-visualizer 再次分析。

结语

通过按需引入 ECharts,成功减少了 Vue3 项目中的打包体积,提升了页面加载速度,优化效果显著。这种优化方法在减少不必要的依赖同时保持图表功能的完整性,为开发者提供了更高效的解决方案。

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

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

相关文章

用Python实现图像风格迁移的技术分析

文章目录 一、概要 二、效果预览 三、整体架构流程 1. 用户界面(GUI): 2. 图像加载与显示: 3. 风格迁移核心算法: 4. 结果显示与保存: 5. 多线程处理: 四、技术名词解释 1. OpenCV: 2. TensorFlow: 3. VGG19: 4. GUI(图形用户界面): 5. 多线程: 五…

gsoap实现webservice服务

gsoap实现webservice服务 在实现Web服务时&#xff0c;使用gSOAP是一个很好的选择&#xff0c;因为它提供了强大的工具和库来创建SOAP和RESTful服务。gSOAP是一个C和C语言开发的库&#xff0c;它支持SOAP协议的各种版本&#xff0c;包括SOAP 1.1和SOAP 1.2。下面是如何使用gSO…

穷举 vs 暴搜 vs 深搜 vs 回溯 vs 剪枝

穷举 vs 暴搜 vs 深搜 vs 回溯 vs 剪枝 1. 全排列2. 子集 1. 全排列 题目链接&#xff1a;46. 全排列 算法原理&#xff1a; 画出决策树 设计函数 全局变量&#xff1a;二维数组ret存储结果&#xff1b;一维数组path存储路径&#xff1b;boolean类型一维数组visited表示当…

NAT(网络地址转换)技术详解:网络安全渗透测试中的关键应用与防御策略

目录 NAT的作用 NAT类型 NAT工作流程示例 NAT 转换技术的原理 源地址转换&#xff08;SNAT&#xff0c;Source NAT&#xff09;&#xff1a; 目标地址转换&#xff08;DNAT&#xff0c;Destination NAT&#xff09;&#xff1a; 端口地址转换&#xff08;PAT&#xff0c…

OpenCV图像基本操作

学习目标&#xff1a; 学习一些OpenCV中对于图像的基本操作 学习内容&#xff1a; 第一步导入库和所需的图像。 import cv2 import numpy as np imgcv2.imread("lena.png") # cv2.imshow("img",img) # cv2.waitKey(0) 访问和修改图片像素 访问图片像素…

具身智能在智能巡检机器人中的应用——以开关柜带电操作机器人为例

随着机器人技术和人工智能的迅速发展&#xff0c;具身智能在各行业的应用日益广泛&#xff0c;尤其是在电力行业中的智能巡检领域。传统的电力巡检和维护工作通常需要人工操作&#xff0c;存在着高温、高压、强电磁场等危险环境&#xff0c;且效率较低。开关柜带电操作机器人作…

巨控GRM530系列的远程模块用于PLC远程上下载方案

巨控GRM530系列的远程模块用于PLC远程上下载方案 一、方案概述 巨控科技基于全球加速服务器与智能通讯模块&#xff0c;提供高效、安全的工业设备远程上下载及维护服务。支持多协议PLC、触摸屏、运动控制器等设备&#xff0c;突破地域限制&#xff0c;实现跨国、跨网络的无缝调…

fastadmin快速搭建导航站和API接口站点系统

这份源码是基于fastadmin框架制作的&#xff0c;不仅可以快速搭建漂亮的导航站和API接口站点&#xff0c;而且还具有可扩展性和定制性。源码开放&#xff0c;方便二次开发和定制&#xff0c;适合各种需求。快来体验这个功能强大的站点源码&#xff0c;为您的项目提供便捷解决方…

【VB语言】EXCEL中VB宏的应用

【VB语言】EXCEL中VB宏的应用 文章目录 [TOC](文章目录) 前言一、EXCEL-VB1.实验过程2.代码 二、EXCEL-VB 生成.c.h文件1.实验过程2.代码 四、参考资料总结 前言 1.WPS-VB扩展包 提示&#xff1a;以下是本篇文章正文内容&#xff0c;下面案例可供参考 一、EXCEL-VB 1.实验过…

告别第三方云存储!用File Browser在Windows上自建云盘随时随地访问

文章目录 前言1.下载安装File Browser2.启动访问File Browser3.安装cpolar内网穿透3.1 注册账号3.2 下载cpolar客户端3.3 登录cpolar web ui管理界面3.4 创建公网地址 4.固定公网地址访问 前言 无论是个人用户还是企业团队&#xff0c;都希望能够有一个高效、安全的解决方案来…

[250217] x-cmd 发布 v0.5.3:新增 DeepSeek AI 模型支持及飞书/钉钉群机器人 Webhook 管理

目录 X-CMD 发布 v0.5.3&#x1f4c3;Changelog&#x1f9e9; deepseek&#x1f9e9; feishu|dingtalk&#x1f4e6; x-cmd✅ 升级指南 X-CMD 发布 v0.5.3 &#x1f4c3;Changelog &#x1f9e9; deepseek 新增 deepseek 模块&#xff0c;用户可通过 deepseek 直接请求使用 …

Kubernetes控制平面组件:etcd常用配置参数

云原生学习路线导航页&#xff08;持续更新中&#xff09; kubernetes学习系列快捷链接 Kubernetes架构原则和对象设计&#xff08;一&#xff09;Kubernetes架构原则和对象设计&#xff08;二&#xff09;Kubernetes架构原则和对象设计&#xff08;三&#xff09;Kubernetes控…

Docker 入门与实战:从安装到容器管理的完整指南

&#x1f680; Docker 入门与实战&#xff1a;从安装到容器管理的完整指南 &#x1f31f; &#x1f4d6; 简介 在现代软件开发中&#xff0c;容器化技术已经成为不可或缺的一部分。而 Docker 作为容器化领域的领头羊&#xff0c;以其轻量级、高效和跨平台的特性&#xff0c;深…

Android 14输入系统架构分析:图解源码从驱动层到应用层的完整传递链路

一、资料快车 1、深入了解Android输入系统&#xff1a;https://blog.csdn.net/innost/article/details/47660387 2、书籍 - Android系统源代码情景分析 二、Perface 1、参考&#xff1a; 2、系统程序分析方法 1&#xff09;加入log&#xff0c;并跟着log一步步分析 -logc…

HarmonyOS-ArkTS基础快速入门

目录 ArkTS 快速入门 ArkTS 快速入门 如图&#xff0c;index.etc里面的内容&#xff08;图中框住的大长方形区域&#xff09;会渲染到预览区中&#xff0c;而console.log(xx,xxx)用于内容的打印&#xff0c;需要在日志中查看打印的内容

FRRouting配置与OSPF介绍,配置,命令,bfd算法:

文章目录 1、frrouting的配置&#xff1a;2、ospf2.1、检测和维护邻居关系2.2、ospfDR和BDR2.3、odpf邻居表2.4、ospf常用命令2.5、bfd配置 1、frrouting的配置&#xff1a; sudo service zebra start sudo service ospfd start telnet localhost 2604 en configure termina…

2-安装YIUI

YIUI框架&#xff1a;GitHub - LiShengYang-yiyi/YIUI: Unity3D UGUI Framework, 基于UI数据事件绑定为核心 数据驱动的UGUI框架, ETUI框架, ET框架官方推荐UI框架 ET框架&#xff1a;egametang/ET: Unity3D Client And C# Server Framework (github.com) 1 - 安装YIUI框架&a…

001-监控你的文件-FSWatch-C++开源库108杰

fswatch 原理与应用简介fswatch 安装fswatch 实践应用具体应用场景与细节补充 1. 简介 有些知识&#xff0c;你知道了不算厉害&#xff0c;但你要是不知道&#xff0c;就容易出乱。 很多时候&#xff0c;程序需要及时获取磁盘上某个文件对象&#xff08;文件夹、文件&#xff0…

机器学习--逻辑回归

机器学习–逻辑回归 一、认知革命&#xff1a;从线性回归到逻辑回归 1.1 本质差异对比 维度线性回归逻辑回归输出类型连续值概率值 (0-1)目标函数最小二乘法极大似然估计数学表达式 y w T x b yw^Txb ywTxb p 1 1 e − ( w T x b ) p\frac{1}{1e^{-(w^Txb)}} p1e−(wTxb…

s1K 数据集:是一个用于提升语言模型推理能力的高质量数据集。包含 1,000 个问题,每个问题都配有详细的 推理路径 和 答案。

2025-02-07&#xff0c; 由斯坦福大学、华盛顿大学等研究机构创建了 s1K 数据集&#xff0c;该数据集包含 1,000 个精心挑选的问题&#xff0c;并配以推理轨迹和答案&#xff0c;为语言模型推理能力的提升提供了重要的数据基础。 一、研究背景 1. 研究背景 近年来&#xff0c;…