vue3+vite项目优化。

news2024/12/24 9:22:28

     最近开发的一个vue3+vite+ts项目,build后发现体积过大,所以针对于项目体积进行一次优化。

一: 使用rollup-plugin-visualizer 可视化分析包

npm i rollup-plugin-visualizer -S

在vite.config.js中引入

在 plugins里面

 然后执行npm run build就自动打开可视化分析

可以看到,由于项目中使用了echarts和@wangeditor富文本编辑器占据了主要体积。

二:针对于echarts优化有两种方案。

1:echarts按需引入,如果项目中用到的图表类型不多,推荐这种方式,可以有效减少项目体积。

由于我们项目中用到的是MapChart地图,在utils下面新建charts.ts

import * as echarts from 'echarts/core';
import {
    MapChart,
    // 系列类型的定义后缀都为 SeriesOption
    MapSeriesOption,
    // LineChart,
    // LineSeriesOption
} from 'echarts/charts';
import {
    TitleComponent,
    // 组件类型的定义后缀都为 ComponentOption
    TitleComponentOption,
    TooltipComponent,
    TooltipComponentOption,
    // GridComponent,
    // GridComponentOption,
    // 数据集组件
    // DatasetComponent,
    // DatasetComponentOption,
    // 内置数据转换器组件 (filter, sort)
    // TransformComponent
} from 'echarts/components';
import { LabelLayout, UniversalTransition } from 'echarts/features';
import { CanvasRenderer } from 'echarts/renderers';

// 通过 ComposeOption 来组合出一个只有必须组件和图表的 Option 类型
export type ECOption = echarts.ComposeOption<
    | MapSeriesOption
    | TitleComponentOption
    | TooltipComponentOption
// | GridComponentOption
// | DatasetComponentOption
>;

// 注册必须的组件
echarts.use([
    TitleComponent,
    TooltipComponent,
    // GridComponent,
    // DatasetComponent,
    // TransformComponent,
    MapChart,
    LabelLayout,
    UniversalTransition,
    CanvasRenderer
]);

// const option: ECOption = {
//     // ...
// };

export default echarts

在main.js中引入

并且使用provide,inject为组件注入依赖。 

 

在组件中使用如上

2 : CDN加速

在vite.config.js中引入

import { autoComplete, Plugin as importToCDN } from "vite-plugin-cdn-import";

 经过以上操作后项目体积缩小至

三:开启Gzip压缩

npm i vite-plugin-compression -D

vite.config.js中引入

import compressPlugin from "vite-plugin-compression"; //静态资源压缩

 plugins配置

compressPlugin({ //gzip静态资源压缩
        verbose: true,    // 默认即可
        disable: false,  //开启压缩(不禁用),默认即可
        deleteOriginFile: false, //删除源文件
        threshold: 10240, //压缩前最小文件大小
        algorithm: 'gzip',  //压缩算法
        ext: '.gz', //文件类型
      }),

 同样 nginx 上也需要配置, 在nginx中的conf文件中的server{}中配置加上如下代码

gzip on; 
gzip_static on; 
gzip_buffers 4 16k;
gzip_comp_level 8; 
gzip_types application/javascript text/plain application/x-javascript text/css application/xml text/javascript application/x-httpd-php image/jpeg image/gif image/png; #压缩文件类型       
gzip_vary on;

四:图片资源压缩。

npm i vite-plugin-imagemin -D

vite.config.js中引入

import viteImagemin from 'vite-plugin-imagemin'
 viteImagemin({
        gifsicle: {
          optimizationLevel: 7,
          interlaced: false
        },
        optipng: {
          optimizationLevel: 7
        },
        mozjpeg: {
          quality: 20
        },
        pngquant: {
          quality: [0.8, 0.9],
          speed: 4
        },
        svgo: {
          plugins: [
            {
              name: 'removeViewBox'
            },
            {
              name: 'removeEmptyAttrs',
              active: false
            }
          ]
        }
      }),

不同格式的文件配置也不一样,具体可以参考 github :vite-plugin-imagemin 。

经过以上手段优化后项目体积降低至707KB

 

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

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

相关文章

最新开源Chatgpt人工智能对话源码系统如何搭建?含详细安装教程分享和源码

人工智能对话系统市场需求正在不断增长。随着人们对智能化、自动化服务的需求不断提高&#xff0c;人工智能对话系统成为越来越多企业和组织的首选解决方案&#xff0c;可以有效提升用户体验、降低成本、提高效率。 一、Chatgpt人工智能对话源码系统定义 ChatGPT是一种基于深…

流量挂机赚钱项目Traffmonetizer

利用闲置电脑/服务器/安卓手机/树莓派来赚点电费 简介 Traffmonetizer是一个来自欧洲的流量挂机平台&#xff0c;类似Peer2profit&#xff0c;满10刀可提现(Paypal、BTC、Payoneer)&#xff0c;注册好像就送5刀&#xff0c;Traffmonetizer不怎么占用CPU和内存以及流量&#x…

初学容器化

1.docker build&#xff0c;ship&#xff0c;run&#xff0c;any app anywhere docker类似运输中的集装箱&#xff0c;可以装任何应用&#xff08;镜像文件&#xff09;&#xff0c;运行到各种服务器上。 docker提供的是进程上的隔离&#xff0c;虚拟机提供的是操作系统资源…

【五一创作】嵌入式Sqlite数据库【基本语法、Sqlite-JDBC、嵌入到Java程序】

目录 前言 基本介绍 Sqlite 对比 MySQL 字段类型 语法 创建表 插入数据 更新数据 查询数据 删除数据 查看建表语句 Sqlite-JDBC 嵌入到Java程序 前言 最近在用JavaFX做一个桌面软件需要用到数据库&#xff0c;但MySQL这种数据库明显只能本地访问&#xff0c;把软…

JVM-0502

垃圾回收 概述 内存的自动分配 垃圾收集&#xff0c;不是J8Va语音的件生产物。早在1968年&#xff0c;第一门开始使用内存动态分配和垃圾收集技术的Lisp语言诞生。关于垃圾收集有三个经典问题&#xff1a; 哪些内存需要回收&#xff1f;什么时候回收&#xff1f;&#xff08;…

双金属复合圆管层间高温接触热阻测试方法的分析和选择

摘要&#xff1a;双金属复合圆管因其优越的特性在越来越多的领域得到广泛应用&#xff0c;而其层间接触热阻是这种圆管作为换热管时的重要性能指标。本文针对这种双金属复合圆管层间接触热阻的测试需求&#xff0c;分析和对比了现有用于接触热阻测试的各种稳态和瞬态方法&#…

网络应用基础 ——(2023新星计划文章一)

一&#xff0c;网络的概念 1.1网络及其带来的好处 &#xff08;1&#xff09;计算机网络是指通过通信设备和通信线路将多台计算机连接起来&#xff0c;以便实现资源共享、信息传递和协同工作的技术和系统。计算机网络是现代信息技术的重要组成部分&#xff0c;已经深入到我们…

代码随想录算法训练营第三十一天 | 贪心1,想不到怎么找局部最优就做不出来

贪心算法理论基础 代码随想录 (programmercarl.com) 贪心算法理论基础&#xff01;_哔哩哔哩_bilibili 贪心的本质是选择每一阶段的局部最优&#xff0c;从而达到全局最优。 例如&#xff0c;有一堆钞票&#xff0c;你可以拿走十张&#xff0c;如果想达到最大的金额&#xff…

代码随想录刷题笔记3

文章目录 回溯细节模板题型组合分割子集排列棋盘问题N皇后问题解数独问题 其他 总结 回溯 本质上&#xff1a;穷举 剪枝。回溯法就是解决这种k层for循环嵌套的问题。 for循环横向遍历&#xff0c;递归纵向遍历&#xff0c;回溯不断调整结果集。 注意画出 解空间树-N叉树。 细…

无云服务器,Linux本地快速搭建web网站,并内网穿透发布上线(1)

文章目录 前言1. 本地搭建web站点2. 测试局域网访问3. 公开本地web网站3.1 安装cpolar内网穿透3.2 创建http隧道&#xff0c;指向本地80端口3.3 配置后台服务 4. 配置固定二级子域名5. 测试使用固定二级子域名访问本地web站点 转载自cpolar文章&#xff1a;Linux CentOS本地搭建…

【QT】 Qt高级——Qt自定义标题栏

【QT】 Qt高级——Qt自定义标题栏 一、Qt自定义标题栏简介 QWidget及其子类窗体组件的标题栏受操作系统的控制&#xff0c;即标题栏的界面风格与操作系统的主题风格相同&#xff0c;工程实践中需要开发者自行定义&#xff0c;达到美化应用程序界面的目的。 二、Qt自定义标题…

每日学术速递5.1

CV - 计算机视觉 | ML - 机器学习 | RL - 强化学习 | NLP 自然语言处理 Subjects: cs.CV 1.Putting People in Their Place: Affordance-Aware Human Insertion into Scenes 标题&#xff1a;把人放在他们的位置&#xff1a;可供感知的人类插入场景 作者&#xff1a;Sumit…

项目管理:项目进度跟踪的好处有哪些?

项目进度跟踪主要针对项目计划、任务和项目成员三个方面&#xff0c;即为了了解整个项目计划完成情况、了解项目的实际进展情况、解成员工作完成情况。 项目跟踪可以证明计划是否可执行&#xff0c;可以说明计划是否可以被完成。 在项目执行过程中&#xff0c;我们也可以通过跟…

网络安全合规-Tisax(汽车安全评估讯息交换平台)一

**TISAX&#xff08;汽车安全评估讯息交换平台&#xff08;可信信息安全评估交换平台&#xff09;&#xff09;**是2017年由德国汽车工业联合会(VDA) 联合欧洲网络交换所(ENX) 所推出的资讯交换平台&#xff0c;通过应用欧洲网络交换协会&#xff08;ENX&#xff09;和德国汽车…

rk3568 适配摄像头 (双摄)

rk3568 适配摄像头 (mipi 双摄) rk3568 适配双摄像其实就是逐个适配单摄像头&#xff0c;只是两颗摄像头的数据总线可能不同(cifmipi)&#xff0c;也可能相同(mipi(2lane) x 2)。几乎相同的上电时许&#xff0c;不同的时钟信号和总线协议决定加载过程会略有不同。 提示&#…

CSDN周赛第49期 - 也谈马拉车

前言 C站的周赛已经很久没有新题了&#xff0c;已考过的题目我差不多都写过题解&#xff0c;若再重复写类似的文章&#xff0c;反而会降低博文质量分&#xff0c;而想要换个角度&#xff0c;却又难以找到动笔的欲望。所以虽然比赛发生在五一假期之前&#xff0c;但直到现在五一…

camunda升级事件的用途

在Camunda中&#xff0c;升级事件&#xff08;Escalation Event&#xff09;是一种可以在工作流中出现异常情况时触发相应操作的事件类型。使用升级事件可以帮助工作流更加灵活地处理异常情况&#xff0c;以确保工作流的正常运行。 使用升级事件可以处理以下情况&#xff1a; …

【Java EE 初阶】如何保证线程安全

目录 1.线程是什么&#xff1f; 2.线程安全&#xff08;重点&#xff09; 1.概念&#xff1a; 1.举例&#xff1a;用两个线程分别对同一个变量做五万次自增&#xff0c;观察答案是否符合预期 那么是哪些原因造成了这种线程不安全的现象呢&#xff1f;我们一起来分析一下&am…

搭建Plex媒体服务器,打造家庭多媒体中心【公网远程访问】

文章目录 1.前言2. Plex网站搭建2.1 Plex下载和安装2.2 Plex网页测试2.3 cpolar的安装和注册 3. 本地网页发布3.1 Cpolar云端设置3.2 Cpolar本地设置 4. 公网访问测试5. 结语 1.前言 用手机或者平板电脑看视频&#xff0c;已经算是生活中稀松平常的场景了&#xff0c;特别是各…

MAC安装MySQL

安装MySQL 登录官网dev.mysql.com/downloads/m… 下载社区版mysql&#xff0c;选择dmg格式的安装包。下载完成后&#xff0c;开始安装。 注意&#xff1a;选择Use Legacy Password Encryption。 解决无法启动MySQL问题 打开设置中的mysql图标&#xff0c;发现红点&#xff0…