vite 打包优化

news2025/4/8 13:24:16

✨专栏介绍

在当今数字化时代,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, // 体积大于阈值会被压缩,单位是b
      algorithm: '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.coloradmin.cn/o/1401528.html

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

相关文章

matplotlib画波动很小的图

今天测试一个画图时&#xff0c;有一个很神奇的发现 import matplotlib.pyplot as plt import numpy as np import pandas as pd x [10,20,30,40,50,60,70,80]y[-23.99534833975495,-23.9999998600783,-24.000000070633167,-24.000000068469788,-24.00000006672905,-24.000…

2023年DevOps国际峰会暨 BizDevOps 企业峰会(DOIS北京站):核心内容与学习收获(附大会核心PPT下载)

随着科技的飞速发展&#xff0c;软件开发的模式和流程也在不断地演变。在众多软件开发方法中&#xff0c;DevOps已成为当下热门的软件开发运维一体化模式。特别是在中国&#xff0c;随着越来越多的企业开始认识到DevOps的价值&#xff0c;这一领域的研究与实践活动日益活跃。本…

electron + selenium报错: Server terminated early with status 1

解决办法&#xff1a; 这种错误一般是浏览器创建的某方法致命错误导致的&#xff0c;查看一下实例化driver的地方有哪些配置&#xff0c;着重看日志、用执行信息存储一类的配置&#xff0c;我的问题是日志文件夹改过了但没有创建 // 浏览器参数设置 const customArguments [-…

OpenHarmony:使用网络组件axios与Spring Boot进行前后端交互

流程图&#xff1a; 一、简单的交互 前端请求函数 firstGet(): Promise<AxiosResponse>{return axios.get(http://192.168.211.1:8090/test/1); } getAaddB(a: number, b: number): Promise<AxiosResponse>{return axios.get(http://192.168.211.1:8090/test/2…

智慧校园统一信息门户平台介绍

统一信息门户平台是以统一身份认证平台为基础,将校内分散、异构的应用和信息资源进行整合,通过统一的访问入口,实现各种应用系统的无缝接入和集成,并围绕校内人员之间的人际关系,构建一个支持信息访问、传递、以及协作的集成化环境,实现个性化业务应用的高效开发、集成、…

【Linux系统编程】进程优先级

文章目录 1. 优先级的基本概念2. 为什么存在优先级3. 查看系统进程4. PRI and NI5. top命令修改已存在进程的nice值6. 其他概念 1. 优先级的基本概念 本篇文章讲解进程优先级&#xff0c;首先我们来了解一下进程优先级的概念&#xff1a; cpu资源分配的先后顺序&#xff0c;就…

linux系统中Makefile的基本使用方法

Makefile是一种编译控制文件&#xff0c;广泛用于项目的自动化构建。它定义了一系列的规则来指导构建的过程。通过Makefile&#xff0c;开发者可以轻松管理大型项目的编译链接、清理等任务。本文将从Makefile的基础用法讲起&#xff0c;逐步深入到更高级的应用&#xff0c;为你…

003 摄像头的配置

string realm_s “IP Camera(J4605)”; 需要根据摄像头的具体型号进行修改&#xff1b; IP Camera(L3433) 张XX的摄像头 正常的启动信息 connect 0. connect success. -------------------------SEND OPTIONS------------------------------ OPTIONS rtsp://192.168.1.64:55…

C#串口通讯控制4路继电上位机

C#串口通讯控制4路继电上位机 界面如下 源码如下 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text;//引入空间 using System.Windows.Forms; using System.I…

PS滤镜插件:Adobe Camera Raw 16 for Mac中文激活版

Adobe Camera Raw是Adobe公司开发的一款用于处理数码相机RAW格式文件的软件插件。它可以在Adobe Photoshop、Adobe Bridge和Adobe Lightroom等软件中使用&#xff0c;用于调整RAW文件的曝光、白平衡、对比度、色彩饱和度、锐化等参数&#xff0c;从而得到更好的图像质量。 软件…

接口测试 04 -- Jsonpath断言、接口关联处理

1. JsonPath基本介绍 1.1 JsonPath简介 JsonPath是一种用于在JSON数据中定位和提取特定数据的表达式语言。它类似于XPath用于XML的定位和提取&#xff0c;可以帮助我们灵活地从复杂的JSON结构中获取所需的数据。 1.2 JsonPath的特点 ● JsonPath可处理的报文类型为字典类型 …

运动的解析:从机械运动到自由落体,探索物体运动的基本规律与数学描述

文章目录 一、机械运动&#xff08;一&#xff09;运动概念&#xff08;二&#xff09;运动形式&#xff08;三&#xff09;参照物 二、质点&#xff08;一&#xff09;理想化模型&#xff08;二&#xff09;质点概念 三、位移和路程&#xff08;一&#xff09;位移&#xff08…

python基础学习-01

Python 是一种简单易学并且结合了解释性、编译性、互动性和面向对象的脚本语言。Python提供了高级数据结构&#xff0c;它的语法和动态类型以及解释性使它成为广大开发者的首选编程语言。 Python 是解释型语言&#xff1a; 开发过程中没有了编译这个环节。类似于PHP和Perl语言。…

如操作系统的心跳,运行状况无可逃避:Shell脚本揭示系统鲜活秘密!

简介 Ubuntu 系统保姆监控脚本&#xff0c;全自动化解读系统运行状态&#xff01;脚本轻量化、资源节约&#xff0c;并且能够定期检测硬盘容量、内存占用和缓存情况。一旦发现缓存占用过高&#xff0c;即刻自动清理缓存&#xff0c;并将结果写入指定目录的日志文件中。日志文件…

鸿蒙开发-UI-布局-相对布局

鸿蒙开发-UI-布局 鸿蒙开发-UI-布局-线性布局 鸿蒙开发-UI-布局-层叠布局 鸿蒙开发-UI-布局-弹性布局 文章目录 前言 一、基本概念 二、设置依赖 1.锚点设置 2.设置相对于锚点的对齐位置 三、使用场景 总结 前言 上文详细学习常见布局方式-弹性布局&#xff0c;学习弹性布局容…

知识图谱KG+大模型LLM

LLM-based KG KnowLM OpenSPGKG-based RAG 基本原理 从query出发的语义解析 pre-LLM方法 思想&#xff1a;直接将问题解析为对应的逻辑表达式&#xff0c;然后到知识图谱中查询。 方法&#xff1a;通常包含逻辑表达式、语义解析算法、语义解析模型训练三部分。一般步骤是将问句…

NODE介绍和环境安装

浏览器是JS的前端运行环境 Node.js是JS的后端运行环境 Node.js中无法调用DOM和BOM等浏览器内置API 基于Express框架&#xff0c;快速构建web应用 基于Electron框架&#xff0c;构建跨平台桌面应用 基于restify框架快速构建API接口项目 读写数据库 下载Node.js环境 网址&…

linux下的nginx相关配置练习

1.基于域名[www.openlab.com](http://www.openlab.com)可以访问网站内容为 welcome to openlab!!! [rootlocalhost ~]# systemctl stop firewalld.service #关闭防火墙 [rootlocalhost ~]# setenforce 0 #关闭selinux [rootlocalhost www]# vim /etc/nginx/conf.d/test_ope…

python 之 指定小数的输出

文章目录 **使用 round() 函数&#xff1a;****使用字符串格式化&#xff1a;****使用f-字符串&#xff1a;****使用 decimal 模块&#xff1a;** 在Python中&#xff0c;可以使用不同的方法来指定浮点数的小数位数。以下是其中一些常见的方式&#xff1a; 使用 round() 函数&…

mapboxGL中的航线动画

概述 借用上篇文章中二阶贝塞尔曲线的生成&#xff0c;本文实现mapboxGL中的航线动画。 效果 实现 1. 初始化地图 const from [101.797439042302, 36.5937248286007]; const to [106.9733, 35.217]; const points new ArcLine(from, to); const line new Geometry(poin…