vite优化

news2024/11/23 15:12:50

1.利用 rollup-plugin-analyzer 插件进行进行代码体积分析,从而优化你的代码。
在这里插入图片描述

根据项目体积分析,进行接下来的优化:

(一)使用unplugin-vue-components插件按需加载antd vue 组件:

使用步骤
1、安装插件

pnpm i unplugin-vue-components -D

2、vite中去使用:vite.config.ts中配置

// 这里
import Components from 'unplugin-vue-components/vite';
import { AntDesignVueResolver } from 'unplugin-vue-components/resolvers';
 
  const vitePlugins: (Plugin | Plugin[])[] = [

    vue(),

    //按需加载antd
    Components({
      dirs: ['src/components', 'src/**/components'],
      resolvers: [AntDesignVueResolver()],
      dts: 'types/components.d.ts',
    }),
  ];

(二)按需加载echarts组件
使用步骤:

专门设置一个echarts配置文件


 // 文件路径 @/lib/echarts.js 自行配置
 
 // 加载echarts,注意引入文件的路径
 import echarts from 'echarts/lib/echarts'
 
 // 再引入你需要使用的图表类型,标题,提示信息等
 import 'echarts/lib/chart/bar'
 import 'echarts/lib/chart/line'
 import 'echarts/lib/component/legend'
 import 'echarts/lib/component/title'
 
 export default echarts

在需要的组件内加载echarts,绘制图表

 <template>
     // ... 与上面实例相同
 </template>
 <style>
     // ... 与上面实例相同
 </style>    
 <script>
 // 重点:此位置引入的是你单独配置的echarts
 import echarts from '@/lib/echarts'
 export default {
     mounted () {
         // ...与上面实例相同
     },
     methods: {
         draw () {
             // ... 与上面实例相同
         }
     }
 }   
 </script>

(三)开启gizp压缩或者brotli 压缩
使用步骤:

安装插件:

pnpm add -D vite-plugin-compression

配置文件:
vite.config.js

import viteCompression from 'vite-plugin-compression'

export default defineConfig({
  plugins: [
    // ...
    viteCompression({
      filename: '[path].gz[query]', // 压缩后的文件名
      algorithm: 'gzip', // 压缩格式:gzip、brotliCompress,
      test: /\.(js|css|svg)$/,
      threshold: 10240,// 只处理比这个值大的资源,按字节算
      minRatio: 0.8, // 只有压缩率比这个值小的文件才会被处理,压缩率=压缩大小/原始大小,如果压缩后和原始文件大小没有太大区别,就不用压缩
      deleteOriginalAssets: false // 是否删除原文件,最好不删除,服务器会自动优先返回同名的.gzip资源,如果找不到还可以拿原始文件
    })
  ],
});

gzip 与 brotli 在 nginx 内的配置

http {
  # 开启gzip
  gzip on;
  # 开启gzip_static
  # gzip_static 开启后可能会报错,需要安装相应的模块, 具体安装方式可以自行查询
  # 只有这个开启,vue文件打包的.gz文件才会有效果,否则不需要开启gzip进行打包
  gzip_static on;
  gzip_proxied any;
  gzip_min_length 1k;
  gzip_buffers 4 16k;
  #如果nginx中使用了多层代理 必须设置这个才可以开启gzip。
  gzip_http_version 1.0;
  gzip_comp_level 2;
  gzip_types text/plain application/javascript application/x-javascript text/css application/xml text/javascript application/x-httpd-php image/jpeg image/gif image/png;
  gzip_vary off;
  gzip_disable "MSIE [1-6]\.";

  # 开启 brotli压缩
  # 需要安装对应的nginx模块,具体安装方式可以自行查询
  # 可以与gzip共存不会冲突
  brotli on;
  brotli_comp_level 6;
  brotli_buffers 16 8k;
  brotli_min_length 20;
  brotli_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript application/javascript image/svg+xml;
}

(四)图片压缩
使用步骤
安装插件

# pnpm
pnpm install vite-plugin-imagemin -D
 # npm
npm install vite-plugin-imagemin -D
 # yarn
yarn add vite-plugin-imagemin -D 

imagemin 安装问题
感谢大佬指出这个问题,这个问题我在vite-plugin-imagemin的README中有看到相应的解决方案,如下

由于 imagemin 在国内不好安装。现提供几个解决方案

1.使用 yarn 在 package.json 内配置(推荐)

"resolutions": {"bin-wrapper": "npm:bin-wrapper-china"}, 

2.使用 npm,在电脑 host 文件加上如下配置即可

199.232.4.133 raw.githubusercontent.com 
  • 由于我的项目图片用的不多,看了有些大佬还对这个图片插件进行优化了,大家可试试,我个人没试过

(五)vite配置,提高了打包速度
vite.config.ts 打包配置:

    build: {
      cssCodeSplit: true, //css 拆分
      sourcemap: false, //不生成sourcemap
      assetsInlineLimit: 5000, //小于该值 图片将打包成Base64
      target: 'modules',
      assetsDir: 'static', // 指定生成静态资源的存放路径
      terserOptions: {
        compress: {
          keep_infinity: true,
          // 用于删除生产环境中的控制台
          drop_console: VITE_DROP_CONSOLE,
        },
      },
      // 关闭brotliSize显示可以稍微减少包装时间
      brotliSize: false,
      chunkSizeWarningLimit: 1500,
      rollupOptions: {
        // 确保外部化处理那些你不想打包进库的依赖
        output: {
          chunkFileNames: 'static/js/[name]-[hash].js',
          entryFileNames: 'static/js/[name]-[hash].js',
          assetFileNames: 'static/[ext]/[name]-[hash].[ext]',
          manualChunks(id) {
            if (id.includes('node_modules')) {
              return id.toString().split('node_modules/')[1].split('/')[0].toString();
            }
          },
        },
      },
    },

(六)使用tailwindcss 减少css体积,方便开发

(七)vite升级至 “vite”: “^4.3.0-beta.2”,

(八)使用PWA离线存储技术

npm install vite-plugin-pwa -D
import { VitePWA } from 'vite-plugin-pwa' 
plugins: [vue(),VitePWA(), vueJsx(),visualizer({
      open:true
})]

PWA 技术的出现就是让web网页无限接近于Native 应用

  1. 可以添加到主屏幕,利用manifest实现
  2. 可以实现离线缓存,利用service worker实现
  3. 可以发送通知,利用service worker实现

进行 npm run build 打包会生成 sw.js
在这里插入图片描述

综上运用到我的项目:

  1. 打包体积变小

在这里插入图片描述

  1. lighthouse评分性能分数优化至优秀的等级
    在这里插入图片描述
  2. 打包速度缩短20s
    在这里插入图片描述

优化真的很费时又不能确保一定能有很飞跃的效果,在不断摸索中前进~~

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

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

相关文章

6.18 、Java初级:锁

1 同步锁 1.1 前言 经过前面多线程编程的学习,我们遇到了线程安全的相关问题,比如多线程售票情景下的超卖/重卖现象. 上节笔记点这里-进程与线程笔记 我们如何判断程序有没有可能出现线程安全问题,主要有以下三个条件: 在多线程程序中 有共享数据 多条语句操作共享数据 多…

GPT-4 的创造力全方位持平或碾压人类 | 一项最新研究发现

文章目录 一、前言二、主要内容三、总结 &#x1f349; CSDN 叶庭云&#xff1a;https://yetingyun.blog.csdn.net/ 一、前言 最近&#xff0c;一项有关 GPT-4 的创造力思维测试火了。来自蒙大拿大学和 UM Western 大学的研究团队发现&#xff0c;GPT-4 在 Torrance 创造性思维…

Sharding-JDBC之RangeShardingAlgorithm(范围分片算法)

目录 一、简介二、maven依赖三、数据库3.1、创建数据库3.2、创建表 四、配置&#xff08;二选一&#xff09;4.1、properties配置4.2、yml配置 五、范围分片算法六、实现6.1、实体层6.2、持久层6.3、服务层6.4、测试类6.4.1、保存订单数据6.4.2、根据时间范围查询订单 一、简介…

还在等待本地渲染?云渲染才是真的省时省心又省钱!

可能很多设计师会觉得本地渲染效果图或动画更灵活&#xff0c;而且没有什么额外的附加费用&#xff0c;但其实不然&#xff01;当你面对多个大型或紧急的项目时&#xff0c;本地渲染就“慌”了。 接下来我将全面对比“本地渲染”和“云渲染”&#xff0c;相信还在等待本地渲染…

黑客常用cmd命令(window版)

1、ping命令 ping命令是一个常用的网络工具&#xff0c;用来测试和诊断网络连接状况。通过发送ICMP&#xff08;Internet控制消息协议&#xff09;数据包到目标主机&#xff0c;并接收回复的数据包&#xff0c;可以测量目标主机的可达性、平均响应时间等指标。 在Windows操作…

前后端实现:行为验证码---文字点选

最近接到一个新的需求&#xff0c;由于客户是内网&#xff0c;你能使用腾讯的验证码了&#xff0c;需要改为前后端实现。 具体的代码已经提交git 项目效果图&#xff1a; 使用的技术栈&#xff1a;vitevue3ts git地址&#xff1a;https://github.com/susanliy/point_captcha…

TCP/IP协议是什么?

78. TCP/IP协议是什么&#xff1f; TCP/IP协议是一组用于互联网通信的网络协议&#xff0c;它定义了数据在网络中的传输方式和规则。作为前端工程师&#xff0c;了解TCP/IP协议对于理解网络通信原理和调试网络问题非常重要。本篇文章将介绍TCP/IP协议的概念、主要组成部分和工…

《程序喵》项目跨域问题解决思路

跨域问题&#xff1a;由于浏览器的 同源策略 限制&#xff0c;当一个请求url的协议、域名、端口号三者之间有任意一个与当前的url不同即为跨域。 同源策略是一种约定&#xff0c;它是浏览器中最核心也最基本的安全功能。同源策略会阻止一个域的 Javascript 脚本和另一个域的内…

举例说明梯度下降算法与最小二乘法的区别

梯度下降算法和最小二乘法都是用于求解线性回归问题中参数的优化方法。我们可以通过一个简单的例子来说明它们之间的区别。 假设我们有以下数据点&#xff1a;(1, 2)&#xff0c;(2, 3)&#xff0c;(3, 4)&#xff0c;(4, 5)&#xff0c;我们希望找到一条最佳拟合线 y wx b&a…

Android 中Looper机制详解

版本基于&#xff1a;Android R 0. 前言 在《Android 基于Handler 剖析消息机制》一文中&#xff0c;以 Handler 类为起点详细分析了异步通信&#xff0c;分析了Java 端 Handler 与Looper、MessageQueue、Message 之前的通信关系。 框架如下&#xff1a; 在Java 端的 Looper …

2. IO 流原理及流的分类

2.1 Java IO 原理 • Java 程序中&#xff0c;对于数据的输入/输出操作以“流(stream)” 的方式进行&#xff0c;可以看做是一种数据的流动。 • I/O 流中的 I/O 是 Input/Output 的缩写&#xff0c; I/O 技术是非常实用的技术&#xff0c;用于处理设备之间的数据传输。如读/写…

浅谈 Cache

1. Cache的历史 在科研领域&#xff0c;C. J. Conti等人于1968年在描述360/85和360/91系统性能差异时最早引入了高速缓存&#xff08;cache&#xff09;一词。Alan Jay Smith于1982年的一篇论文中引入了空间局部性和时间局部性的概念。 Mark Hill在1987年发明了3C&#xff08…

OpenCV项目开发实战--实现平均脸功能教程附(C++/Python)源码实现

文末附基于Python和C++两种方式实现的测试代码下载链接 图 1:计算生成的平均脸 介绍 在本教程中,我们将学习如何使用 OpenCV (C++ / Python) 创建平均面孔。 大多数人会同意图 1 中的女人很漂亮。你能猜出她的种族吗?为什么她的皮肤完美无瑕?好吧,她不是真的。她也不是完…

如何识别手写笔记?这些方法助你快速制作电子版笔记

小张是一名大学生&#xff0c;每天需要上多门课程&#xff0c;整理笔记就成了他不得不常常面对的事情&#xff0c;但是&#xff0c;手写笔记管理起来也有些麻烦&#xff0c;有时候还容易丢失。所以在朋友的推荐下&#xff0c;他使用了一款识别软件并将手写笔记转化为可编辑的电…

推荐好用的AI工具集

AI技术未来已来&#xff0c;我们要拥抱变化 &#xff0c;笔记试用好用AI工具&#xff0c;也在代码中试用chatGPT 一、工具集 解决任何问题&#xff1a;ChatGPT 写文案&#xff1a;Jasper Al 、Copysmith 生成真人视频&#xff1a;Synthesia、 CogView2 AI AI 解决法律问题…

如何对加密字段进行模糊查询

当我们在日常开发中设置数据表时&#xff0c;经常需要定义一些敏感字段&#xff0c;如&#xff1a;身份证号、手机号、住址、账号密码等信息&#xff0c;对待这些敏感信息&#xff0c;我们必须进行加密存储&#xff0c;以保证数据存储安全。但是&#xff0c;当用户查询个人信息…

DEV-C++安装OpenGL详细教程

Dev C配置OpenGL环境——计算机图形学 一、首先自行下载dev-c 二、以下过程请认真阅读~ 确保你的C:\Windows\System32与C:\Windows\SysWOW64中有上述链接中的.dll文件(即&#xff1a;glut.dll,glut32.dll)确保你的~\Dev-CPP\MinGW64\x86_64-w64-mingw32\lib中有上述链接中的…

Mybatis源码分析_解析大流程梳理_解析配置文件 (3)

学习mybatis&#xff0c;绕不开一个核心类 Configuration。这个类相当于一个小型数据库&#xff0c;把mybatis里面所有的配置信息基本全部给存储起来了。 package org.apache.ibatis.session;import java.util.Arrays; import java.util.Collection; import java.util.HashMap;…

常见的网络抓包工具推荐

因为发现好多人想抓包&#xff0c;但是不知道有哪些工具&#xff0c;今天我给大家推荐几款抓包工具&#xff0c;希望对大家有所帮助。 网络抓包工具的用途 网络抓包工具的主要功能是将网络执行的过程&#xff0c;详细的记录下来。如果你是一个程序员&#xff0c;肯定对网络抓…

上传视频文件,基于断点续传(整合Minio)

目录 1、什么是断点续传 2、分块文件 3、合并文件 4、 Minio 分布式文件系统整合断点续传 4.1 进行文件分块上传到 Minio 4.2 进行 Minio 中分块文件的合并 5、使用 Minio 进行断点续传的注意事项 相信很多小伙伴在上传下载图片或者视频的时候&#xff0c;突然间&#xff08;…