Vite优化之gz压缩

1,163 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第5天,点击查看活动详情

为什么?

目的就是把服务端响应的文件的体积尽量减小,优化返回速度

为什么压缩放在客户端?

既然服务端都可以做压缩,为什么在 vite 打包应用时还要多此一举呢?我们可以看下 nginx 配置中 gzip_comp_level 这个配置项

gzip_comp_level 5;

数字越大压缩效果越好,但是会耗费更多的CPU和时间,我们压缩文件主要是为了减少传输时间,如果每次请求静态资源服务端都要压缩很久才会返回信息,不仅本末倒置吗?况且服务器开销也会增大很多。既然现在的 spa 应用文件都是打包生成的,我们在打包的时候就直接生成高压缩等级的文件,作为静态资源放在服务器上,接收到请求后直接把这些压缩版文件返回回去不就好了

http传输gzip原理

客户端(浏览器)在请求静态资源(js、css等)的时候,在请求头 Request Header 里带上 accept-encoding字段来表明接受哪些压缩方法, 如accept-encoding: gzip, deflate;服务端在接收到请求时如果发现有这个配置,则发送gzip压缩版本的文件,并在响应头 Response Headers 配置一个 content-encoding 字段,用于说明服务端数据的压缩方法(可选值是gzip、compress、deflate),否则(没有accept-encoding)就发送源文件;客户端再根据返回响应头里 content-encoding 对应的格式去做相应的解码/解压缩;没有content-encoding项则不进行解压缩。
accept-encodingcontent-encoding字段都非常语义化,就是传输的文件以怎样的格式编码/解码,所以当响应头有content-encoding: gzip出现,就能说明我们服务端的gzip压缩成功开启了

安装插件

yarn add vite-plugin-compression -D

引入以及使用

import viteCompression from 'vite-plugin-compression'

plugins: [vue(),viteCompression()],

效果

image.png

nginx 配置开启

 server {
        listen       8080;
        server_name  localhost;
        #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;
        # 是否在http header中添加Vary: Accept-Encoding,建议开启
        gzip_vary on;
    }