vite3+vue3 项目打包优化三 — CDN加速、文件压缩

news2024/11/17 1:47:24

1. CDN在线加速

内容分发网络(Content Delivery Network,简称 CDN),是构建在数据网络上的一种分布式内容分发网,它可以让用户从最近的服务器请求资源,以提升网络请求的响应速度。

通常情况下,我们请求依赖模块使用 CDN ,而请求项目代码依然使用自己的服务器。

在 Vite + Vue3 项目开发过程中,像 element-plus、lodash-es 等工具库,会有很大的文件依赖。我们可以尝试通过配置 CDN 的方式来减轻"单系统"的请求压力。(一般我们的项目只有一个服务器,称为单系统)

数字化管理平台
Vue3+Vite+VueRouter+Pinia+Axios+ElementPlus
Vue权限系统案例
个人博客地址

安装 CDN 管理插件

# npm 方式
npm i vite-plugin-cdn-import -D

# yarn 方式
yarn add vite-plugin-cdn-import -D

以 lodash-es 为例,在 vite.config.ts 文件中,配置对应 module 的 CDN

import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'

// 使用 CDN 插件
import vitePluginCDN from 'vite-plugin-cdn-import'

export default defineConfig({
  // plugins 需要用到的插件数组
  plugins: [
    vue(),
    vitePluginCDN({
      // 配置需要 CDN 加速的模块
      modules: [
        { name: 'lodash-es', var: '_', path: 'https://cdn.jsdelivr.net/npm/lodash@4.17.21/lodash.min.js'}
      ]
    })
  ]
})

通过 npm run build 命令构建成功后,Vite 会自动将 CDN 资源通过 script 标签插入到 html 中(如下图)。这样请求 lodash 资源就会产生加速 buff,而且项目的打包体积也会大大减少。

**[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-RsWoJx4D-1684914383410)(./%E9%A1%B9%E7%9B%AE%E6%8F%92%E4%BB%B6.assets/image-20230524135023768.png)]**

使用 CDN 的问题:一但依赖网站出现问题,我们的项目也就不行了,建议留下备用方案,以便维护。如果公司有条件,可以使用公司自己的 CDN 以确保安全性

2. gzip压缩

gzip 是一种压缩格式,使用其可大幅减小代码体积,提升网络性能。在项目打包、Web服务中常被配置开启。

gzip 在当前项目中的开启方式比较简单,通过配置 vite-plugin-compression 即可:

安装插件:

# npm 方式
npm i vite-plugin-compression -D

# yarn 方式
yarn add vite-plugin-compression -D

在 vite.config.ts 文件中配置如下

import { defineConfig } from 'vite'
import viteCompression from 'vite-plugin-compression'

export default defineConfig({
  plugins: [viteCompression()]
})

配置参数

  • filter:过滤器,对哪些类型的文件进行压缩,默认为/.(js|mjs|json|css|html)$/i
  • verbose: true:是否在控制台输出压缩结果,默认为 true
  • threshold :启用压缩的文件大小限制,单位是字节,默认为 0
  • disable : false:是否禁用压缩,默认为 false
  • deleteOriginFile :压缩后是否删除原文件,默认为 false
  • algorithm :采用的压缩算法,默认是 gzip
  • ext :生成的压缩包后缀

参数配置方式

viteCompression({
    verbose: true, // 是否在控制台输出压缩结果
    disable: false, // 是否禁用,相当于开关在这里
    threshold: 10240, // 体积大于 threshold 才会被压缩,单位 b,1b=8B, 1B=1024KB  那我们这里相当于 9kb多吧,就会压缩
    algorithm: 'gzip', // 压缩算法,可选 [ 'gzip' , 'brotliCompress' ,'deflate' , 'deflateRaw']
    ext: '.gz', //文件后缀
})

执行打包命令,控制台信息如下:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BFByo1cj-1684914383411)(./%E9%A1%B9%E7%9B%AE%E6%8F%92%E4%BB%B6.assets/image-20230524143017627-1684909818955-1.png)]

不难发现,经过 gzip 压缩后,文件体积大大缩小。

把打包好的项目放入服务器目录,服务器开启 gzip 服务,这样通过项目地址就可以在浏览器中进行访问了。Nginx 配置如下:

server{
    #gzip
    #开启gzip功能
    gzip on;
    #开启gzip静态压缩功能
    gzip_static on;
    #gzip缓存大小
    gzip_buffers 4 16k;
    #gzip http版本
    gzip_http_version 1.1;
    #gzip 压缩级别 1-10 
    gzip_comp_level 5;
    #gzip 压缩类型
    gzip_types text/plain application/javascript text/css application/xml text/javascript application/x-httpd-php image/jpeg image/gif image/png; 
    gzip_vary on; 
}

当在浏览器中请求被压缩的静态资源时,服务端会根据浏览器支持的类型,设置响应头 content-encoding:gzip,告诉浏览器以何种方式进行解压。

需要注意的是,浏览器解压也是需要时间的,如果项目体积不是很大的话,不建议采用 gzip 进行压缩。

使用浏览器访问服务器中的项目,打开控制台 -> 网络,如下:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-omc5jm3R-1684914383412)(./%E9%A1%B9%E7%9B%AE%E6%8F%92%E4%BB%B6.assets/image-20230524144525345.png)]

注:如果没有的话,请右击该栏 -> 响应头配置(Header Options -> 响应标头(Response Headers) -> 内容编码(Content-Encoding)进行配置

3. 图片压缩

根据项目对清晰度的要求,我们可以使用 vite-plugin-imagemin 插件,对图片进行适当压缩

安装

# npm 方式
npm i vite-plugin-imagemin -D

# yarn 方式
yarn add vite-plugin-imagemin -D

vite.congi.ts 中配置各种图片压缩参数

import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
import viteImagemin from 'vite-plugin-imagemin'

export default defineConfig({
  plugins: [
  	vue(),
    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.coloradmin.cn/o/563830.html

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

相关文章

tcp套接字的应用

tcp服务端流程 tcp客户端流程 客户端代码 tcpClient.hpp #include<iostream> #include<string> #include<cstring> #include<stdlib.h> #include<unistd.h> #include<sys/types.h> #include<sys/socket.h> #include<netinet/in…

DG4pros高楼区地籍建模项目报告

引言 据睿铂统计&#xff0c;目前约70%倾斜摄影相机都用于测量项目&#xff0c;其中绝大部分是地籍测量相关项目。例如黑龙江某客户已使用睿铂相机累计完成约1000平方公里的地籍项目。倾斜摄影技术虽然在农村地籍测量项目中应用较好&#xff0c;但却无法解决高楼区域地籍测量的…

使用 SD-WAN 实现企业级 WAN 敏捷性、简易性和性能

VMware SD-WAN 提高了敏捷性和成本效益&#xff0c;同时确保跨 WAN 的应用性能。 当今的分支机构用户正在使用更多的广域网 (WAN) 带宽&#xff0c;因为他们需要通过 Zoom、WebEx、Microsoft 365 等工具进行在线协作&#xff0c;更多地用到 “软件即服务”(SaaS) 和云计算服务…

【python资料】pandas的条件查询

一、说明 在使用Pandas的DataFrame进行数据挖掘的时候&#xff0c;需要形形色色的条件查询&#xff0c;但是这些查询的基本语法是啥&#xff0c;查询的灵活性如何&#xff0c;本文将对他们进行详细列出&#xff0c;便于以后查阅。 二、Pandas条件查询方法 2.1 简单条件查询 1、…

「API接口的技术说明文档

API技术文档是指软件系统或应用程序的API接口的技术说明文档。它详细描述了API端点&#xff0c;资源&#xff0c;参数&#xff0c;请求和响应格式以及使用API的常见用例和最佳实践。 1.为什么需要API技术文档&#xff1f; API技术文档是API的唯一方法&#xff0c;以便开发人员…

分享18个好用的ChatGPT插件

上周ChatGPT又进化了&#xff0c;支持联网还有70几种第三方插件&#xff0c;不过还是老样子&#xff0c;只服务氪金玩家&#xff0c;免费端可能还得等等。之前只开放了俩插件&#xff0c;网络浏览器和代码解释器&#xff0c;只能说是真的不够用。 ChatGPT&#xff1a;不够&…

中间件(三)- Kafka(二)

Kafka 6. 高效读写&Zookeeper作用6.1 Kafka的高效读写6.2 Kafka中zookeeper的作用 7. 事务7.1 Producer事务7.2 Consumer事务 8. API生产者流程9. 通过python调用kafka9.1 安装插件9.2 生产者&#xff08;Producer&#xff09;与消费者&#xff08;Consumer&#xff09;9.3…

【实验】SegViT: Semantic Segmentation with Plain Vision Transformers

想要借鉴SegViT官方模型源码部署到本地自己代码文件中 1. 环境配置 官网要求安装mmcv-full1.4.4和mmsegmentation0.24.0 在这之前记得把mmcv和mmsegmentation原来版本卸载 pip uninstall mmcv pip uninstall mmcv-full pip uninstall mmsegmentation安装mmcv 其中&#xff…

你若在患难之日胆怯,你的力量便微小

如果你在做一件事情之前就过分放大它的困难&#xff0c;这就会逐渐降低自己去做它的动机和动力&#xff0c;还没开始你就已经削弱了自己的行动能力&#xff0c;在气势上就已经输了。 不要害怕困难&#xff0c;勇敢的去面对问题&#xff0c;解决问题&#xff0c;你就会在气势上更…

RK平台烧录固件的几种模式

在RK平台开发过程中&#xff0c;我们在使用烧录工具烧写固件的时候经常可以看到烧录工具会显示当前PC识别到的设备类型&#xff0c;一般有&#xff1a;MASKROM&#xff0c;LOADER&#xff0c;ADB&#xff0c;MSC等等。能烧录固件的模式有MASKROM模式和LOADER模式&#xff0c;下…

Python基础教程:第八章_Python文件操作

文件的编码 学习目标 掌握文件编码的概念和常见编码 思考&#xff1a;计算机只能识别&#xff1a;0和1&#xff0c;那么我们丰富的文本文件是如何被计算机识别&#xff0c;并存储在硬盘中呢&#xff1f; 答案&#xff1a;使用编码技术&#xff08;密码本&#xff09;将内…

STM32WB55_NUCLEO开发(12)----FUS 更新

概述 在 STM32WB 微控制器中&#xff0c;FUS&#xff08;Firmware Upgrade Services&#xff09;是用于固件升级的一种服务。这项服务可以让你更新设备上的无线栈固件&#xff08;如蓝牙、Zigbee或 Thread 栈&#xff09;&#xff0c;以及无线 MCU (microcontroller unit) 的系…

day5 - 利用阈值勾勒

阈值处理在计算机视觉技术中占有十分重要的位置&#xff0c;他是很多高级算法的底层逻辑之一。本实验将练习使用图像阈值处理技术来处理不同的情况的图像&#xff0c;并获得图像轮廓。 完成本期内容&#xff0c;你可以&#xff1a; 了解图像阈值处理技术的定义和作用 掌握各阈…

PyQt5 使用 pyinstaller打包文件(speed)

编写界面 import sys,math from PyQt5.QtWidgets import * from PyQt5.QtCore import Qt from PyQt5.QtGui import *class RightBottomButton(QWidget) :def __init__(self):super(RightBottomButton,self).__init__()self.setWindowTitle("界面One")self.resize(400…

1.8G专网工业路由器促进4G智能电力建设,赋能配电站远程监控管理

TD-LTE已是当下成熟的4G通信技术&#xff0c;应用无线专网的场景也越来越多&#xff0c;4G技术在电力物联网中也得到了广泛应用。依托传统的人工监管方式&#xff0c;效率低、成本高、维护难&#xff0c;为促进4G智能电力建设迫切需要方便快捷的在线监控方式来及时发现电力配网…

xss跨站,订单,shell箱子反杀记

打开一个常见的订单靶场&#xff0c;老师自己搭建的 这个是可以进行xss漏洞的测试&#xff0c;凡是有这种数据交互的地方&#xff0c;前端有一个数据的接受&#xff0c;后端是数据的显示&#xff0c;这个过程就符合漏洞产生的前提条件&#xff0c;将输入的数据进行个显示&#…

BUUCTF-Basic部分(4道)

目录 Linux Labs BUU LFI COURSE 1 BUU BRUTE 1 BUU SQL COURSE 1 Linux Labs 第一个界面&#xff0c;给出了SSH ssh 用户名&#xff1a;root 密码&#xff1a;123456 地址和端口为动态分配的 以及映射地址和端口&#xff08;这个地址端口是随机的&#xff09; node4.buuoj.c…

R语言实践——使用 rWCVP 生成自定义清单

使用 rWCVP 生成自定义清单 介绍1. 特有物种清单2. 近特有物种清单2.1 在塞拉利昂和另一地区出现的物种2.2 在塞拉利昂和相邻地区出现的物种 3. 生成自定义报告 介绍 除了允许用户从世界维管植物名录&#xff08;WCVP&#xff09;创建清单外&#xff0c;rWCVP还提供了修改清单…

在小公司“混”了2年,我只认真做了5件事,如今顺利拿到字节 Offer

前言 是的&#xff0c;我一家小公司工作了整整两年时间&#xff0c;在入职这家公司前&#xff0c;也就是两年前&#xff0c;我就开始规划了我自己的人生&#xff0c;所以在两年时间里&#xff0c;我并未懈怠。 现如今&#xff0c;我已经跳槽到了字节&#xff0c;入职字节测试…

傅里叶级数 傅里叶变换 及应用

傅里叶级数和傅立叶变换是傅里叶分析的两个主要工具&#xff0c;它们之间有密切的关系。 什么是傅里叶级数 傅里叶级数是将一个周期函数分解为一系列正弦和余弦函数的和。它适用于周期性信号&#xff0c;可以将周期函数表示为一组振幅和相位不同的谐波分量的和。傅里叶级数展…