vite打包配置以及性能优化

vite打包配置以及性能优化

安装插件

首先该安装的插件,你要安装一下吧

这三个是基本的插件,其他优化的插件下面会介绍到

    "vite": "4.4.6",
    "vite-plugin-html": "^3.2.0",
    "@vitejs/plugin-vue": "^4.2.3",

vite.config.ts文件中

配置

这是最基本的配置,当然,可以上线,但仍然有很多待优化的地方

import { resolve } from 'path';
import { loadEnv } from 'vite';
import vue from '@vitejs/plugin-vue';
import { createHtmlPlugin } from 'vite-plugin-html';

import type { UserConfig, ConfigEnv } from 'vite';



function pathResolve(dir: string) {
  return resolve(__dirname, '.', dir);
}

// https://vitejs.dev/config/
export default ({ mode }: ConfigEnv): UserConfig => {
  const root = process.cwd();
  const env = loadEnv(mode, root);
  const { VITE_APP_TITLE, VITE_OUT_DIR, VITE_PORT, VITE_PUBLIC_PATH, VITE_APP_PROXY } = env;

  return {
    base: VITE_PUBLIC_PATH,
    resolve: {
      alias: {
        '/@': pathResolve('src'),
        '/@views': pathResolve('src/views'),
        '/@components': pathResolve('src/components'),
        '/@types': pathResolve('src/types'),
      },
    },
    server: {
      open: true,
      port: Number(VITE_PORT),
      hmr: {
        overlay: true,
      },
      proxy: {
        '/api': {
          target: VITE_APP_PROXY,
          changeOrigin: true,
          rewrite: (path) => path.replace(/^\/api/, ''),
        },
      },
    },
    build: {
      outDir: VITE_OUT_DIR,
      sourcemap: true,
      target: ['es2020'],
      chunkSizeWarningLimit: 1000,
    },
    plugins: [
      vue(),
      createHtmlPlugin({
        minify: mode === 'production',
        inject: {
          data: {
            title: VITE_APP_TITLE,
          },
        },
      }),
    ],
  };
};

性能优化

性能优化无非就是减小打包后体积;减小http请求;加速渲染;

其实下面介绍的只是我自己用到的,还有更过的插件参考官网:vite插件

一会要看官网,发现的好的可以告诉我哦

rollup-plugin-visualizer

首先安装一个打包体积分析的插件:rollup-plugin-visualizer ,打包时会生成一个stats.html文件去显示各个包依赖的大小;

npm i rollup-plugin-visualizer -D


import { visualizer } from 'rollup-plugin-visualizer'; //打包体积分析

 plugins: [
     visualizer({ open: true}),
    ],

在这里插入图片描述

vite-plugin-css-injected-by-js

将css注入到js文件中,有效减少http请求 但这里css中的背景图片路径会错误(目前没有找到解决方案),选择性使用

npm i vite-plugin-css-injected-by-js -D


import { visualizer } from 'rollup-plugin-visualizer'; //打包体积分析

 plugins: [
     visualizer(),
    ],

亲测可用,就不重新打包给截图了(效减少http请求 但这里css中的背景图片路径会错误(目前没有找到解决方案))

去除console、debugger

 build: {
      outDir: VITE_OUT_DIR,
      sourcemap: true,
      chunkSizeWarningLimit: 1000,
      minify: 'terser', //压缩方式
      terserOptions: {
        compress: {
          drop_console: true,
          drop_debugger: true,
        },
      },
    },

CDN 加速

注意这使用与大多数项目,但对于无网络连接的b/s端不能用
注意:找可靠稳定的cdn连接,用户要有网

下面是举两个例子

  plugins: [
      vue(),
      createHtmlPlugin({
        minify: mode === 'production',
        inject: {
          data: {
            title: VITE_APP_TITLE,
            vuescript: '<script src="https://cdn.bootcdn.net/ajax/libs/vue/3.2.0/vue.global.min.js"></script><script src="https://cdn.bootcdn.net/ajax/libs/echarts/5.4.2/echarts.esm.js"></script>'
          },
        },
      }),
    ],

注意在入口html中引用

<head>
 
  <%- vuescript %>

</head>

在这里插入图片描述

文件压缩 vite-plugin-compression 文件压缩

这里nginx 也要配置, 配置启动gzip模块, 然后优先使用本地压缩好的文件。
不要傻傻的不配置nginx,不然徒劳无获,验证有没有配置成功最简单的方法就是删除源文件看是否可以正常打开

npm i vite-plugin-compression -D

import viteCompression from 'vite-plugin-compression';


    plugins: [
      vue(),
      viteCompression({
        verbose: true, // 是否在控制台中输出压缩结果
        disable: false,
        threshold: 10240, // 如果体积大于阈值,将被压缩,单位为b,体积过小时请不要压缩,以免适得其反
        algorithm: 'gzip', // 压缩算法,可选['gzip',' brotliccompress ','deflate ','deflateRaw']
        ext: '.gz',
        deleteOriginFile: false, // 源文件压缩后是否删除
      }),
    ],





图片压缩 vite-plugin-imagemin

这个可以降低体积,但是资源在国外,不好安装
可以更换镜像源:参考连接:国内npm源镜像(npm加速下载) 指定npm镜像

npm i vite-plugin-imagemin -D

import viteImagemin from 'vite-plugin-imagemin'


plugin: [
    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
          }
        ]
      }
    })
]

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Eureka:集群环境配置

创建三个集群 导包 <!-- 导包--><dependencies><!-- Eureka -server --><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-eureka-server</artifactId><version>1.…

信号

信号也是IPC中的一种&#xff0c;是和管道&#xff0c;消息队列&#xff0c;共享内存并列的概念。 本文参考&#xff1a; Linux中的信号_linux中信号_wolf鬼刀的博客-CSDN博客 Linux系统编程&#xff08;信号处理 sigacation函数和sigqueue函数 )_花落已飘的博客-CSDN博客 Linu…

回归预测 | MATLAB实现SA-SVM模拟退火算法优化支持向量机多输入单输出回归预测(多指标,多图)

回归预测 | MATLAB实现SA-SVM模拟退火算法优化支持向量机多输入单输出回归预测&#xff08;多指标&#xff0c;多图&#xff09; 目录 回归预测 | MATLAB实现SA-SVM模拟退火算法优化支持向量机多输入单输出回归预测&#xff08;多指标&#xff0c;多图&#xff09;效果一览基本…

Scratch 之 RPG 引擎制作教程(1) / 地图行走

大家好&#xff0c;又和大家见面了&#xff0c;那么我们这期讲的就是RPG游戏的地图以及人物的行走。 我发现大家并不是很懂RPG游戏引擎&#xff0c;也就是说这种引擎对于技术的要求还是比较高的。为了让更多人直接上手制作RPG游戏&#xff0c;我打算开启这一系列教程。 这个教程…

Azure应用程序网关

文章目录 什么是应用程序网关实战演练创建虚拟网络创建虚拟机创建应用程序网关测试搭建结果 什么是应用程序网关 Azure应用程序网关是一种托管服务&#xff0c;用于提供安全、可缩放的 Web 应用程序前端点的应用程序传送控制和保护。它可以通过 SSL 终止、cookie 基于会话持久…

Cesium加载Supermap的wmts服务

最近使用cesium 加载supermap的wmts 服务&#xff0c;多次遇到加载异常与白页面问题&#xff0c;纠结好久最后才搞定[特此记录] 1、首先找到方法加载wmts 的api 文档 官方提示使用WebMapTileServiceImageryProvider加载wmts 2、然后编辑加载代码 //1.新建ImageryProviderlet…

【rust/egui】(三)看看template的app.rs:序列化、持久化存储

说在前面 rust新手&#xff0c;egui没啥找到啥教程&#xff0c;这里自己记录下学习过程环境&#xff1a;windows11 22H2rust版本&#xff1a;rustc 1.71.1egui版本&#xff1a;0.22.0eframe版本&#xff1a;0.22.0上一篇&#xff1a;这里 serde app.rs中首先定义了我们的Templ…

Three.js程序化3D城市建模【OpenStreetMap】

对于我在 Howest 的研究项目&#xff0c;我决定构建一个 3D 版本的 Lucas Bebber 的“交互式讲故事的动画地图路径”项目。 我将使用 OSM 中的矢量轮廓来挤出建筑物的形状并将它们添加到 3js 场景中&#xff0c;随后我将对其进行动画处理 推荐&#xff1a;用 NSDT编辑器 快速搭…

ARM-M0内核MCU,内置24bit ADC,采样率4KSPS,传感器、电子秤、体脂秤专用,国产IC

ARM-M0内核MCU 内置24bit ADC &#xff0c;采样率4KSPS flash 64KB&#xff0c;SRAM 32KB 适用于传感器&#xff0c;电子秤&#xff0c;体脂秤等等

08 - 网络通信优化之IO模型:如何解决高并发下IO瓶颈?

提到 Java I/O&#xff0c;相信你一定不陌生。你可能使用 I/O 操作读写文件&#xff0c;也可能使用它实现 Socket 的信息传输…这些都是我们在系统中最常遇到的和 I/O 有关的操作。 我们都知道&#xff0c;I/O 的速度要比内存速度慢&#xff0c;尤其是在现在这个大数据时代背景…

postgresql 的递归查询

postgresql 的递归查询功能很强大&#xff0c;可以实现传统 sql 无法实现的事情。那递归查询的执行逻辑是什么呢&#xff1f;在递归查询中&#xff0c;我们一般会用到 union 或者 union all&#xff0c;他们两者之间的区别是什么呢&#xff1f; 递归查询的执行逻辑 递归查询的…

leetcode中常用的 C++函数和 STL容器

C函数和 STL容器 输入输出C排序sortC翻转字符串reverseC截取字符串strsub哈希表的使用定义查询哈希表里是否有该key在哈希表里存放键值链式哈希 哈希集合定义一个哈希集合查找一个字符是否在set里面删除和添加 优先队列 最大堆优先队列的大顶堆定义方式插入存储数组对定义插入 …

idea使用docker生成镜像(打包镜像,导入镜像,导出镜像)

1&#xff1a;先下载安装dockerdesktop&#xff0c;安装成功后 2&#xff1a; 在cmd执行docker -v&#xff0c;查看安装的docker版本 C:\Users\dell>docker -v Docker version 24.0.5, build ced09963&#xff1a;需要启动 dockerdesktop应用&#xff0c;才算启动docker&a…

⛳ TCP 协议详解

目录 ⛳ TCP 协议详解&#x1f3a8; 一、TCP / IP 协议的分层模型&#x1f3d3; 1.1、应用层&#x1f9f8; 1.2、传输层&#x1f52e; 1.3、网络层&#x1f3af; 1.4、链路层 &#x1f3ed; 二、HTTP 报文传输原理&#x1f945; 2.1、HTTP 报文传输&#x1f48e; 2.2、封装和分…

计算机网络-物理层(三)编码与调制

计算机网络-物理层&#xff08;三&#xff09;编码与调制 在计算机网络中&#xff0c;计算机需要处理和传输用户的文字、图片、音频和视频&#xff0c;它们可以统称为消息 数据是运输信息的实体&#xff0c;计算机只能处理二进制数据&#xff0c;也就是比特0和比特1。计算机中…

aardio开发语言Excel数据表读取修改保存实例练习

import win.ui; /*DSG{{*/ var winform win.form(text"aardio form";right759;bottom479) winform.add( buttonEnd{cls"button";text"末页";left572;top442;right643;bottom473;z6}; buttonExcelRead{cls"button";text"读取Exce…

用 VB.net,VBA 两种方式 读取单元格内的 换行数据,并出力到 CSV文件

用 VB.net&#xff0c;VBA 两种方式 读取单元格内的 换行数据&#xff0c;并出力到 CSV文件 需求 如下图所示&#xff0c;为了生成csv文件导入数据库&#xff0c;需要将下图 的 1 和 2 拼接成 如下 3 所示的一行数据&#xff0c; 开头为 1 &#xff0c;往后为 2 的换行数据 将换…

中国大学生服务外包创新创业大赛丨借 AI 之力,助“记账”难题

一、中国大学生服务外包创新创业大赛 赛事介绍 中国大学生服务外包创新创业大赛&#xff0c;是响应国家关于鼓励服务外包产业发展、加强服务外包人才培养的相关战略举措与号召&#xff0c;举办的每年一届的全国性竞赛。 大赛均由中华人民共和国教育部、中华人民共和国商务部…

selenium 选定ul-li下拉选项中某个指定选项

场景&#xff1a;selenium的下拉选项是ul-li模式&#xff0c;选定某个指定的选项。 from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC # 显示等待def select_li(self, text, *ul_locator):"…

对话音视频牛哥:开发RTSP|RTMP直播播放器难不难?难在哪?

我关注的播放器指标 好多开发者跟我交流音视频相关技术的时候&#xff0c;经常问我的问题是&#xff0c;多久可以开发个商业级别的RTMP或RTSP播放器&#xff1f;你们是怎样做到毫秒级延迟的&#xff1f;为什么一个播放器&#xff0c;会被你们做到那么复杂&#xff1f;带着这些…
最新文章