vite 打包优化

✨专栏介绍

在当今数字化时代,Web应用程序已经成为了人们生活和工作中不可或缺的一部分。而要构建出令人印象深刻且功能强大的Web应用程序,就需要掌握一系列前端技术。前端技术涵盖了HTML、CSS和JavaScript等核心技术,以及各种框架、库和工具。在本专栏中,我们将深入学习前端技术的各个方面。我们将学习如何使用HTML构建语义化的网页结构,如何使用CSS进行样式设计和布局,以及如何使用JavaScript实现交互功能和动态效果。此外,我们还将介绍各种流行的前端框架和库,并学习如何使用它们来提高开发效率和用户体验。通过学习这些内容,你将能够成为一名熟练的前端开发者,并能够应用这些知识来构建出现代化且高质量的Web应用程序。让我们一起开始前端技术的学习之旅吧!

在这里插入图片描述

文章目录

    • ✨专栏介绍
    • 引言
    • 1. 分析打包文件
        • 1.1. 安装 rollup-plugin-visualizer 插件
        • 1.2. 在vite.config.js 引入该插件
        • 1.3. chunk分析图
    • 2. 静态资源与依赖处理
        • 2.1. 检测是否使用,未使用到的直接删除。
        • 2.2. depcheck
    • 3. 代码分割,大文件分包
        • 3.1. 在 vite.config.js 进行配置
        • 3.2. 分包效果
        • 3.3. chunkSizeWarningLimit
    • 4. 代码gzip压缩
        • 4.1. 安装vite-plugin-compress插件对文件进行gzip压缩,减小构建包体积。
        • 4.2. 在vite.config.js进行配置
        • 4.3. 压缩效果
    • 5. 按需加载
    • 6. 图片压缩
        • 6.1. 安装vite-plugin-imagemin插件进行图片压缩
        • 6.2. 在vite.config.js进行配置
    • 7. CDN加速
        • 7.1. 安装vite-plugin-cdn-import进行cdn加速
        • 7.2. 在vite.config.js中配置
    • 总结
    • 😶 写在结尾


在这里插入图片描述

引言

打包优化是指通过一系列的技术手段和策略,对软件应用进行优化,以减少打包文件的大小、提高应用的加载速度和性能。随着移动互联网的快速发展和应用程序的复杂化,打包优化变得越来越重要。本文将介绍一些常见的打包优化技术和策略,以帮助开发者更好地优化自己的应用程序。

1. 分析打包文件

1.1. 安装 rollup-plugin-visualizer 插件

此插件可以展示构建时长、chunk 数量及大小,是分析构建的绝佳利器。

npm install rollup-plugin-visualizer -D
1.2. 在vite.config.js 引入该插件
import { visualizer } from 'rollup-plugin-visualizer'export default defineConfig({ plugins: [ // ...// 将 visualizer 插件放到最后的位置 visualizer() ]
})
1.3. chunk分析图

配置好插件后,执行构建命令,会在根目录下生成一个stats.html的文件,该文件就是项目打包的chunk分析图。

2. 静态资源与依赖处理

通过构建分析找到那些比较大的静态资源进行处理,比如图片,movie等文件。

2.1. 检测是否使用,未使用到的直接删除。
2.2. depcheck

通过depcheck找到未使用的依赖进行删除。

3. 代码分割,大文件分包

3.1. 在 vite.config.js 进行配置
rollupOptions: {output: {chunkFileNames: 'static/js/[name]-[hash].js', // 代码分割导致的额外的构建产物的文件名entryFileNames: 'static/js/[name]-[hash].js', // 打包入口生成的构建结果assetFileNames: 'static/[ext]/[name]-[hash].[ext]', // 重命名构建后生成产物的名字manualChunks: (id: string | string[]) => { // 对node_modules中的依赖进行分包if (id.includes('node_modules')) {return id.toString().split('node_modules/')[1].split('/')[0].toString()}}}
}
3.2. 分包效果

上述操作主要对打包后的文件进行归类,未配置前的打包结果是所有的js、css、png等都是在static中,全部混在一起。现在的效果如图:


manualChunks:

当该选项值为函数形式时,每个被解析的模块都会经过该函数处理。如果函数返回字符串,那么该模块及其所有依赖将被添加到以返回字符串命名的自定义 chunk 中。上述例子会将node_modules中的依赖以其文件命名创建chunk。

3.3. chunkSizeWarningLimit

vite 打包后的单个文件默认大于500kb会报警告。通过设置chunkSizeWarningLimit可以将修改其大小限制

export default defineConfig({build: {chunkSizeWarningLimit: 700, // 单位是KB}
})

4. 代码gzip压缩

4.1. 安装vite-plugin-compress插件对文件进行gzip压缩,减小构建包体积。
4.2. 在vite.config.js进行配置
import viteCompression from 'vite-plugin-compression'export default defineConfig({ plugins: [viteCompression({verbose: true, // 输出压缩成功disable: false, // 是否禁用threshold: 10240, // 体积大于阈值会被压缩,单位是balgorithm: 'gzip', // 压缩算法ext: '.gz', // 生成的压缩包后缀deleteOriginFile: true, // 是否删除原文件}),]
})
4.3. 压缩效果

打包后的压缩效果能减小js文件65%左右的大小。6.7MB => 2.5MB

此方法需要配置Nginx开发gzip功能。

另外因为构建时需额外压缩文件,所以会增加构建时间。

⚠️注意: 浏览器解压同样需要时间,如果不是特别大的文件不建议进行压缩。

5. 按需加载

对于一些工具依赖,可使用其es版本,通过tree-shaking进行优化,只打包用到的函数。

6. 图片压缩

6.1. 安装vite-plugin-imagemin插件进行图片压缩
npm i vite-plugin-imagemin -D
6.2. 在vite.config.js进行配置
import viteImagemin from 'vite-plugin-imagemin'export default defineConfig({plugins: [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}]}})]
})

7. CDN加速

7.1. 安装vite-plugin-cdn-import进行cdn加速
npm install vite-plugin-cdn-import -D
7.2. 在vite.config.js中配置
import viteCDNImport from 'vite-plugin-cdn-import'export default defineConfig({plugins: [viteCDNImport({modules: [{name: 'echarts',var: 'echarts',path: 'https://cdn.staticfile.org/echarts/4.3.0/echarts.min.js',}]})]
})

打包后会在html的head中自动添加:

<script src="https://cdn.staticfile.org/echarts/4.3.0/echarts.min.js"></script>

这样可以有效减小项目体积。

总结

本文介绍了几种常见的打包优化技术和策略,包括代码压缩、文件合并、按需加载、懒加载等。通过对代码进行压缩和合并,可以减少打包文件的大小;通过按需加载和懒加载,可以提高应用程序的加载速度和性能。此外,还介绍了一些其他的打包优化技巧,如使用CDN加速、使用缓存等。这些技术和策略可以帮助开发者更好地优化自己的应用程序,提升用户体验。在实际开发中,开发者可以根据具体情况选择适合自己项目的打包优化方案,并结合性能测试进行调整和优化。通过不断地学习和实践,开发者可以不断提升自己在打包优化方面的能力,为用户提供更好的应用体验。


😶 写在结尾

前端设计模式专栏
在这里插入图片描述
设计模式是软件开发中不可或缺的一部分,它们帮助我们解决了许多常见问题,并提供了一种优雅而可靠的方式来构建应用程序。在本专栏中,我们介绍了所有的前端设计模式,包括观察者模式、单例模式、策略模式等等。通过学习这些设计模式,并将其应用于实际项目中,我们可以提高代码的可维护性、可扩展性和可重用性。希望这个专栏能够帮助你在前端开发中更好地应用设计模式,写出高质量的代码。点击订阅前端设计模式专栏

Vue专栏
在这里插入图片描述
Vue.js是一款流行的JavaScript框架,用于构建用户界面。它采用了MVVM(Model-View-ViewModel)的架构模式,通过数据驱动和组件化的方式,使开发者能够更轻松地构建交互性强、可复用的Web应用程序。在这个专栏中,我们将深入探讨Vue.js的核心概念、组件开发、状态管理、路由和性能优化等方面的知识。我们将学习如何使用Vue.js构建响应式的用户界面,并探索其强大的生态系统,如Vue Router和Vuex、Pinia。通过学习这些内容,你将能够成为一名熟练的Vue.js开发者,并能够应用这些知识来构建复杂而高效的Web应用程序。点击订阅Vue专栏

JavaScript(ES6)专栏在这里插入图片描述
JavaScript是一种广泛应用于网页开发和后端开发的脚本语言。它具有动态性、灵活性和易学性的特点,是构建现代Web应用程序的重要工具之一。在这个专栏中,我们将深入探讨JavaScript语言的基本语法、DOM操作、事件处理、异步编程以及常见算法和数据结构等内容。此外,我们还将介绍ES6(ECMAScript 2015)及其后续版本中引入的新特性,如箭头函数、模块化、解构赋值等。通过学习这些内容,你将能够成为一名熟练的JavaScript开发者,并能够应用这些知识来构建出高质量和可维护的Web应用程序。点击订阅JavaScript(ES6)专栏

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

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

相关文章

一篇综述洞悉医学大型语言模型的原理,应用和挑战

在过去的一年中&#xff0c;随着 GPT-4、LLaMA、Mistral&#xff0c;PaLM 等先进技术的突飞猛进&#xff0c;大型语言模型&#xff08;Large Language Models&#xff09;已经引领全球人工智能进入了一个全新的基础模型时代&#xff0c;这一时代不仅开启了技术创新的新篇章&…

opencv多张图片实现全景拼接

最近camera项目需要用到全景拼接&#xff0c;故此查阅大量资料&#xff0c;终于将此功能应用在实际项目上&#xff0c;下面总结一下此过程中遇到的一些问题及解决方式&#xff0c;同时也会将源码附在结尾处&#xff0c;供大家参考&#xff0c;本文采用的opencv版本为3.4.12。 首…

Base64编码原理解析

文章目录 一、Base64Base64编码的原理如下&#xff1a;以字符串"hello world"为例&#xff0c;它的ASCII码为&#xff08;下面&#x1f447;是ASCII码对照表&#xff09;&#xff1a;将这些ASCII码转换为二进制&#xff08;对照上表&#xff09;&#xff1a;将上述二…

Pyside6入门教学——编写一个UI界面并显示

1、安装Pyside6 输入下列命令安装Pyside6。 pip install Pyside6 2、设计UI 打开Qt设计工具&#xff08;在安装Pyside6包的目录下&#xff09;。 【注】我这用的是anaconda虚拟环境&#xff0c;所以我的路径是D:\App\Anaconda3\envs\snake\Lib\site-packages\PySide6。设计…

前端(html+css+javascript)作业--展现家乡的网页

期末期间&#xff0c;老师布置了前端作业&#xff0c;现在放到这里&#xff0c;给各位同志参考。 桂平市是广西壮族自治区的一个美丽的城市&#xff0c;拥有丰富的历史文化和自然景观&#xff0c;属于贵港市管辖&#xff0c;那为什么是看起来是市级而不是县级&#xff0c;其实他…

GaussDB(DWS)查询优化技术大揭秘

GaussDB(DWS)查询优化技术大揭秘 大数据时代&#xff0c;数据量呈爆发式增长&#xff0c;经常面临百亿、千亿数据查询场景&#xff0c;当数据仓库数据量较大、SQL语句执行效率低时&#xff0c;数据仓库性能会受到影响。本文将深入讲解在GaussDB(DWS)中如何进行表结构设计&#…

uni-app 经验分享,从入门到离职(年度实战总结:经验篇)——上传图片以及小程序隐私保护指引设置

文章目录 &#x1f525;年度征文&#x1f4cb;前言⏬关于专栏 &#x1f3af;关于上传图片需求&#x1f3af;前置知识点和示例代码&#x1f9e9;uni.chooseImage()&#x1f9e9;uni.chooseMedia()&#x1f4cc;uni.chooseImage() 与 uni.chooseMedia() &#x1f9e9;uni.chooseF…

5D动感影院新奇体验丰富环境特效7D互动影院

5D动感影院太火啦&#xff01;凭借真实互动感、全视景高清屏幕、立体环绕音效、D打造新颖沉浸式观影体验&#xff0c;成为年轻人/家长/小朋友的新晋打卡聚集地&#xff0c;时刻上演着精彩绝伦的视觉盛宴&#xff01; 1、5D动感影院【硬件组成】&#xff1a;动感平台、金属银幕、…

Alinx ZYNQ 7020 LED调试--in RAM

设置拨码开关为JTAG方式 烧写LED bit stream a. 点击“Program device”烧录程序到FPGA中&#xff08;重新上电程序就丢失了&#xff09; b. /01_led/led.runs/impl_1/led.bit 程序烧录到Flash中 ZYNQ与以往的直接烧录Flash不同&#xff0c;首先必须PS&#xff0c;然后烧…

PXE和kickstart无人值守安装

PXE高效批量网络装机 引言 1.系统装机的引导方式 启动 操作 系统 1.硬盘 2.光驱&#xff08;u盘&#xff09; 3.网络启动 pxe 重装系统&#xff1f; 在已有操作系统 新到货了一台服务器&#xff0c; 装操作系统 系统镜像 u盘 光盘 pe&#xff1a; 小型的 操作系统 在操…

HTTP/HTTPS代理IP在多线程爬虫项目中的实践

在多线程爬虫项目中&#xff0c;HTTP/HTTPS代理IP的实践主要包括以下几个关键步骤&#xff1a; 1. 收集代理IP资源&#xff1a; - 从免费或付费代理IP提供商、公开代理列表网站&#xff08;如西刺代理、无忧代理等&#xff09;抓取代理IP和端口信息。 - 存储这些IP到数据库或者…

统计学-R语言-5.3

文章目录 前言分位数统计量的标准误总结 前言 本篇文章即为概率与分布的最后一篇文章。 分位数 分位数函数是累积分布函数的反函数。 p-分位数是具有这样性质的一个值&#xff1a;小于或等于它的概率为p。 根据定义&#xff0c;中位数即50%分位数。 分位数通常用于置信区间的…

RT-Thread 15. list_timer与软定时器

1. 代码 void rt_thread_usr1_entry(void *parameter) {/* set LED2 pin mode to output */rt_pin_mode(LED2_PIN, PIN_MODE_OUTPUT);while (1){rt_pin_write(LED2_PIN, PIN_HIGH);rt_thread_mdelay(2000);rt_pin_write(LED2_PIN, PIN_LOW);rt_thread_mdelay(3000);} }int ma…

前端公共组件库优化

背景 前段时间入职了新公司后&#xff0c;做一些内部前端基建的工作&#xff0c;其中一个工作就是优化现有的frontend-common公共组件库。之前的组件库一直是以源码依赖的形式存在&#xff0c;即各个项目通过git submodule的方式将该仓库引入到各个项目中&#xff0c;作为一个…

【K8S 云原生】K8S的对外服务—ingress

目录 一、K8S的Service 1、Service的作用 2、Service类型&#xff1a; 二、ingress 1、ingress的组成&#xff1a; 2、ingress资源的定义项&#xff1a; 3、ingress暴露服务端的方式 3.1、DeploymentLoadBalancer模式&#xff1a; 1、工作流程图&#xff1a; 3.2、Dae…

PDF转PowerPoint - Java实现方法

通过编程实现PDF转PPT的功能&#xff0c;可以自动化转换过程&#xff0c;减少手动操作的工作量&#xff0c;并根据需要进行批量转换。将PDF文件转换为PPT文档后&#xff0c;可以利用PPT的丰富功能和动画效果&#xff0c;达到更好的演示效果。 在Java中&#xff0c;我们可以使用…

PyTorch损失函数(二)

损失函数 5、nn.L1Loss nn.L1Loss是一个用于计算输入和目标之间差异的损失函数&#xff0c;它计算输入和目标之间的绝对值差异。 主要参数&#xff1a; reduction&#xff1a;计算模式&#xff0c;可以是none、sum或mean。 none&#xff1a;逐个元素计算损失&#xff0c;返…

清晰光谱空间:全自动可调波长系统的高光谱成像优势

高光谱成像技术 高光谱成像技术是一种捕获和分析宽波长信息的技术&#xff0c;能够对材料和特征进行详细的光谱分析和识别。高光谱成像技术的实现通过高光谱相机&#xff0c;其工作原理是使用多个光学传感器或光学滤波器分离不同波长的光&#xff0c;并捕获每个波段的图像&…

Node+Express编写接口---服务端

开始&#xff1a; 个人兴趣爱好&#xff0c;欢迎大家多多指教&#xff01;(点击直达源码!) node_vue_admin: 第一个以node为后端,vue为前端的后台管理项目https://gitee.com/ah-ah-bao/node_vue_admin.git 第一步:安装 安装Node.js 点击直达Node.js (nodejs.org) 安装Navic…

点赞模块设计 - Redis缓存 + 定时写入数据库实现高性能点赞功能

点赞模块设计 - Redis缓存 定时写入数据库实现高性能点赞功能 源码地址&#xff1a;github.com/cachecats/c… 点赞是作为整个系统的一个小模块&#xff0c;代码在 user-service 用户服务下。 本文基于 SpringCloud, 用户发起点赞、取消点赞后先存入 Redis 中&#xff0c;再…