第5章 Vite高级功能(二)

文章目录

    • 6 缓存和持久化
      • 6.1 配置缓存目录
    • 7 压缩与最小化
      • 7.1 启用压缩
      • 7.2 配置压缩选项
    • 8 生产环境优化
      • 8.1 移除调试信息
      • 8.2 配置环境变量
    • 9 静态资源优化
      • 9.1 压缩图像
      • 9.2 合并和压缩 CSS
      • 9.3 使用 HTTP/2
    • 10 分析构建结果
      • 10.1 使用分析插件
      • 10.2 生成包分析报告

6 缓存和持久化

Vite 使用缓存来加速开发服务器的启动和模块热替换(HMR)。你可以配置缓存选项来优化构建性能。

6.1 配置缓存目录

你可以通过 cacheDir 选项指定缓存目录:

// vite.config.js
import { defineConfig } from 'vite'export default defineConfig({cacheDir: '.vite-cache' // 自定义缓存目录
})

7 压缩与最小化

Vite 使用 esbuild 进行代码压缩和最小化,可以显著减少构建输出的体积。

7.1 启用压缩

默认情况下,Vite 在生产模式下会启用代码压缩。你可以通过 build.minify 选项来控制压缩行为:

// vite.config.js
import { defineConfig } from 'vite'export default defineConfig({build: {minify: 'esbuild' // 使用 esbuild 进行压缩}
})

7.2 配置压缩选项

你可以通过 esbuild 选项来自定义压缩行为:

// vite.config.js
import { defineConfig } from 'vite'export default defineConfig({esbuild: {minify: true, // 启用代码压缩minifyWhitespace: true, // 压缩空白字符minifyIdentifiers: true, // 压缩标识符minifySyntax: true // 压缩语法}
})

8 生产环境优化

在生产环境中,除了压缩代码外,还有其他一些优化手段可以提升应用性能。

8.1 移除调试信息

你可以使用 define 选项在生产环境中移除调试信息:

// vite.config.js
import { defineConfig } from 'vite'export default defineConfig({define: {__DEBUG__: false // 设置调试标识}
})

在代码中使用这个标识来控制调试信息:

if (__DEBUG__) {console.log('Debug info')
}

8.2 配置环境变量

你可以通过环境变量来控制生产环境中的行为:

# .env.production
VITE_API_URL=https://api.example.com

在代码中使用环境变量:

const apiUrl = import.meta.env.VITE_API_URL
fetch(apiUrl + '/data').then(response => response.json()).then(data => console.log(data))

9 静态资源优化

优化静态资源(如图像、字体、CSS)可以显著提升应用的加载性能。

9.1 压缩图像

你可以使用插件来压缩图像文件:

npm install vite-plugin-imagemin --save-dev
// vite.config.js
import { defineConfig } from 'vite'
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.65, 0.9],speed: 4},svgo: {plugins: [{removeViewBox: false},{removeEmptyAttrs: false}]}})]
})

9.2 合并和压缩 CSS

你可以通过 css 选项来配置 CSS 处理行为:

// vite.config.js
import { defineConfig } from 'vite'export default defineConfig({css: {postcss: {plugins: [require('cssnano')({preset: 'default'})]}}
})

9.3 使用 HTTP/2

HTTP/2 支持多路复用,可以显著提高静态资源的加载速度。你可以使用支持 HTTP/2 的静态文件服务器来部署你的应用。

10 分析构建结果

分析构建结果可以帮助你找到优化的机会,减少包的体积和依赖的数量。

10.1 使用分析插件

你可以使用 rollup-plugin-visualizer 插件来生成构建结果的可视化报告:

npm install rollup-plugin-visualizer --save-dev
// vite.config.js
import { defineConfig } from 'vite'
import { visualizer } from 'rollup-plugin-visualizer'export default defineConfig({build: {rollupOptions: {plugins: [visualizer({filename: './dist/stats.html'})]}}
})

10.2 生成包分析报告

构建项目后,打开生成的 stats.html 文件,你可以看到构建结果的详细分析报告。

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

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

相关文章

PostgreSQL的使用

PostgreSQL的使用 1.首先,使用docker进行安装pgvector数据库,具体的安装步骤可以查看我之前发的博文。 2.docker exec -it pgvector /bin/bash 进入docker容器内部,操作数据库,上述命令是以交互式命令进入了容器的内部&#xf…

卷技术还是卷应用?李彦宏给出了明确答案

如何理解李彦宏说的“不要卷模型,要卷应用” 引言 7月4日,2024世界人工智能大会在上海世博中心召开。百度创始人兼CEO李彦宏在产业发展主论坛上呼吁:“大家不要卷模型,要卷应用!”这句话引起了广泛讨论。李彦宏认为&a…

Python股票计算小程序(字符串格式化练习)

要求:打印的第一行使用f控制,第二行打印使用占位符,股价输出保留两位小数。 # 股价计算小程序 name"周氏集团" stock_price19.99 stock_code "9283" stock_price_daily_growth_factor1.2 growth_days7print(f"公司…

多线程场景下,使用QEventLoop使界面不卡顿的同时过滤用户输入

背景描述 有耗时的操作需要放到子线程中处理,但是此过程中不允许界面执行其他操作,不能使用阻塞界面的模态对话框实现。 可以通过QEventLoop在子线程执行的同时开启一个事件循环,使UI界面不卡顿,能够正常响应。但是这种不卡顿只是…

【Python进阶】继承进阶和私有权限

目录 一、继承进阶 1、方法重写 2、调用父类方法 3、多层继承 二、私有权限 1、私有属性 2、私有方法 面向对象基础:小白也能看懂的Python基础教程(8)-CSDN博客 一、继承进阶 1、方法重写 当父类的同名方法达不到子类的要求&#x…

阿里云上kubesphere安装配置 - 使用阿里云负载均衡

教程参考 https://www.kubesphere.io/zh/docs/v3.3/installing-on-linux/public-cloud/install-kubesphere-on-ali-ecs/ 环境配置 关闭防火墙关闭selinux关闭swap分区时间同步hosts解析内核参数设置检查DNS安装ipvs安装依赖组件安装、设置docker每台机器都需要操作 #安装工具…

crossJoin笛卡尔积

crossJoin笛卡尔积 在Spark中,crossJoin方法用于执行两个数据集之间的笛卡尔积操作。具体来说,如果有两个数据集(DataFrame或Dataset),调用crossJoin方法将会生成一个新的数据集,其中包含两个原始数据集中所…

Monaco 中添加 CodeLens

CodeLens 会在指定代码行上添加一行可点击的文字,点击时可以触发定义的命令,效果如下: 通过调用 API 注册 LensProvider,点击时触发 Command,首先要注册命令,通过 editor.addCommand () 方法进行注册。三个…

7月9日学习打卡-回文链表,交叉链表

大家好呀,本博客目的在于记录暑假学习打卡,后续会整理成一个专栏,主要打算在暑假学习完数据结构,因此会发一些相关的数据结构实现的博客和一些刷的题,个人学习使用,也希望大家多多支持,有不足之…

python使用tkinter添加下载进度UI

添加进度组件 def download(): # 创建下载进度框progress_window tk.Toplevel()progress_window.title("下载进度")progress_label tk.Label(progress_window, text"正在下载视频文件...")progress_label.pack(pady10)progress_bar ttk.Progre…

【微信小程序开发实战项目】——个人中心页面的制作

👨‍💻个人主页:开发者-曼亿点 👨‍💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍💻 本文由 曼亿点 原创 👨‍💻 收录于专栏&#xff1a…

canvas高清绘制与retina屏

一、retina屏 视网膜显示屏(英语:Retina Display)是一种由苹果公司设计和委托制造的现实屏幕,具备足够高像素密度而使得人体肉眼无法分辨其中单独像素点的液晶屏幕。 比如,初期Retina屏幕的分辨率为640960&#xff0…

在 PostgreSQL 里如何处理数据的版本跟踪和回滚?

文章目录 一、事务二、保存点三、使用版本控制扩展四、审计表和触发器五、使用时间戳列六、比较和还原数据七、考虑数据备份和恢复八、结论 在数据库管理中,数据的版本跟踪和回滚是非常重要的功能,有助于在数据操作出现错误或需要回滚到特定状态时进行有…

HINet: Half Instance Normalization Network for Image Restoration

论文:HINet: Half Instance Normalization Network for Image Restoration Abstract: 在本文中,我们探讨了实例归一化在低级视觉任务中的作用。 具体来说,我们提出了一个新颖的块:半实例归一化块(HIN 块&…

洛谷 数学进制 7.9

P1100 高低位交换 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 代码一 #include<bits/stdc.h> using namespace std; typedef long long ll; #define IOS ios::sync_with_stdio(0),cin.tie(0),cout.tie(0)const ll N1e510; char a[N];int main() {IOS;ll a;int b[32]…

十分钟且一次性带你学懂泛型编程思想(模板化思想)

引言 在编程的世界里&#xff0c;泛型编程思想&#xff08;模板化思想&#xff09;是一种极具魅力的编程范式。它允许我们编写出具有高度通用性和可重用性的代码&#xff0c;极大地提高了开发效率和代码质量。无论你是初学者还是有一定经验的开发者&#xff0c;掌握泛型编程思想…

GNU/Linux - 什么是loopback设备

在计算机科学中&#xff0c;特别是在类Unix操作系统中&#xff0c;环回设备&#xff08;loopback device&#xff09;是一种虚拟设备&#xff0c;它将一个文件映射为块设备。这使得可以像访问物理磁盘或分区一样访问一个文件。环回设备通常用于挂载磁盘镜像、操作文件系统镜像以…

【单链表】05 有一个带头结点的单链表L,设计一个算法使其元素递增有序。

&#x1f57a;作者&#xff1a; 主页 我的专栏C语言从0到1探秘C数据结构从0到1探秘Linux算法题上机准备 &#x1f618;欢迎 ❤️关注 &#x1f44d;点赞 &#x1f64c;收藏 ✍️留言 题目 有一个带头结点的单链表L,设计一个算法使其元素递增有序。 算法思路 解决办法有很多&…

代码随想录训练营第三十三天 509斐波那契数列 70爬楼梯 746使用最小花费爬楼梯

第一题&#xff1a; 原题链接&#xff1a;509. 斐波那契数 - 力扣&#xff08;LeetCode&#xff09; 本题很简单&#xff0c; 递推公式&#xff1a;dp[i] dp[i - 1] dp[i - 2]; 初始化dp[0] 0; dp[1] 1; 顺序遍历即可 代码如下&#xff1a; class Solution { public…

商品分页,商品模糊查询

一、商品分页 引入分页 定义分页主件的参数 在请求url上拼接参数 定义改变当前页码后触发的事件&#xff0c;把当前页码的值给到分页表单&#xff0c;重新查询 二、商品查询&#xff08;以商品的名称查询name为例&#xff09; 引入elementplus的from表单组件 定义一个FormData…