vite 打包优化

news/2024/7/10 1:09:18 标签: vite, 前端, vue

✨专栏介绍

在当今数字化时代,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
viteconfigjs__22">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. 代码分割,大文件分包

viteconfigjs__52">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压缩

viteplugincompressgzip_96">4.1. 安装vite-plugin-compress插件对文件进行gzip压缩,减小构建包体积。
viteconfigjs_98">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. 图片压缩

vitepluginimagemin_139">6.1. 安装vite-plugin-imagemin插件进行图片压缩
npm i vite-plugin-imagemin -D
viteconfigjs_145">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加速

viteplugincdnimportcdn_185">7.1. 安装vite-plugin-cdn-import进行cdn加速
npm install vite-plugin-cdn-import -D
viteconfigjs_191">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.niftyadmin.cn/n/5332423.html

相关文章

Go Build编译打包文件

Go编译打包文件 1、简单打包 程序 main1.go&#xff1a; package mainimport "fmt"func main() {fmt.Println("Hello World!") }打包&#xff1a; # 在linux服务上执行下面的3个命令 # linux平台,生成main1可执行程序 CGO_ENABLED0 GOOSlinux GOARCHam…

What is `DOM注入攻击` does?

DOM&#xff08;Document Object Model&#xff09;注入攻击&#xff0c;也称为DOM型跨站脚本&#xff08;DOM-based XSS, 或简称DXSS&#xff09;&#xff0c;是一种特殊的跨站脚本攻击方式。不同于传统的存储型XSS或反射型XSS&#xff0c;DOM注入攻击的关键在于客户端JavaScr…

鸿蒙应用开发横空出世:是否应该换赛道

鸿蒙应用开发横空出世:互联网寒冬的希望? 大家好,我是demo.最近相信大家最近也收到了这样的消息,网上大肆宣传明年未来的趋势是鸿蒙应用开发,这里呢我也确实被这些信息所覆盖.最近几年确实互联网行业不是很景气,许多公司大量裁员,很多人都因此丢了工作.大龄程序员一直是互联网…

Android Matrix绘制PaintDrawable设置BitmapShader,手指触点为圆心scale放大原图,Kotlin

Android Matrix绘制PaintDrawable设置BitmapShader&#xff0c;手指触点为圆心scale放大原图&#xff0c;Kotlin 在 Android基于Matrix绘制PaintDrawable设置BitmapShader&#xff0c;以手指触点为中心显示原图的圆切图&#xff0c;Kotlin&#xff08;4&#xff09;-CSDN博客 的…

【机器学习实例讲解】机器学习-鸢尾花数据集多分类第02课

问题定义与理解&#xff1a; 明确机器学习任务的目标&#xff0c;是分类、回归、聚类、强化学习还是其他类型的问题。 确定业务背景和需求&#xff0c;了解所处理数据的现实意义。 数据收集&#xff1a; 根据任务目标从各种来源获取原始数据&#xff0c;可以是数据库、文件、…

CNAS中兴新支点——软件测试7条原则

软件测试报告 最需要注意的就是测试思考&#xff0c;而非测试执行。而对软件测试菜鸟来说&#xff0c;初入行&#xff0c;首先要知道软件测试的7条原则&#xff0c;了解这些可以让你事倍功半。 软件测试的7条原则 1&#xff09;测试的不可穷尽原则 是的&#xff01;任何产品…

全球移动通信市场,正在经历哪些新变化?

2023年已经结束了。回顾这一年的全球移动通信市场&#xff0c;如果让我用一个词来总结&#xff0c;那就是——“厚积薄发”。 从表面上来看&#xff0c;似乎并没有什么大事情发生。但实际上&#xff0c;平静的湖面之下&#xff0c;却是一片波涛汹涌、风云激荡。 无论是消费互联…

pdf拆分成各个小pdf的方法

背景:由于某些缘故,一个大的pdf需要拆分成页数少的pdf,或者pdf需要去掉指定页,那么就有必要对pdf进行重新编辑,这里需要用到一个库,直接进行操作即可。 当使用Python时,可以使用PyMuPDF库来拆分PDF文件。以下是一个示例代码, import fitz # PyMuPDF def split_pdf(i…