【前端工程化】比gzip压缩更优的br压缩

news2024/9/28 19:24:35

🐱 个人主页:不叫猫先生,公众号:前端舵手
🙋‍♂️ 作者简介:2022年度博客之星前端领域TOP 2,前端领域优质作者、阿里云专家博主,专注于前端各领域技术,共同学习共同进步,一起加油呀!
💫优质专栏:vue3+vite+typeScript从入门到实践
📢 资料领取:前端进阶资料可以找我免费领取
🔥 摸鱼学习交流:我们的宗旨是在「工作中摸鱼,摸鱼中进步」,期待大佬一起来摸鱼(文末有我wx或者私信)

目录

  • Brotli
  • Brotli压缩与其算法压缩对比
  • 如何在项目中使用
    • 1、vue本地项目配置
    • 2、Nginx配置
      • 方式一:动态加载
      • 方式二:静态编译
    • 启用Brotli压缩

在这里插入图片描述

Brotli

Brotli 是谷歌推出的开源压缩算法,比常见的Gzip更高效,它通过变种的 LZ77 算法、Huffman 编码以及二阶文本建模等方式进行数据压缩,帮我们更高效的压缩网页中的各类文件大小,提高加载速度。

Brotli 压缩只在 https 下生效,因为 在 http 请求中 request header 里的 Accept-Encoding是没有 br 的,只有gzip, deflate 。并且 Brotli 和 gzip 是可以并存的,因此无需关闭 gzip,客户端可以根据其能力选择最适合的压缩算法
比如知乎就用了br压缩,虽然br压缩目前不是主流,但是它确实很高效。
在这里插入图片描述

Brotli压缩与其算法压缩对比

下图来源于网络,从压缩比率和压缩时间来分析brotli、bzip2、gzip、xz这四种压缩算法,结果可想而知,brotli两者都位居首位
在这里插入图片描述

如何在项目中使用

项目环境:Vue + Vite + TS

1、vue本地项目配置

  • 安装 brotli 依赖
yarn add rollup-plugin-brotli -D
  • 配置 vite.config.ts
export default defineConfig({
  plugins: [
    vue(),
    brotli()
    ]
 })
  • 打包
yarn run build

打包后生成以.br结尾的文件
在这里插入图片描述

2、Nginx配置

由于nginx目前并不支持Brotli压缩算法,需要安装第三方模块 ngx_brotli。以下是安装和配置 ngx_brotli 模块的一般步骤:

  • 安装 ngx_brotli 模块:
yum -y install git
#先下载brotli
git clone https://github.com/google/ngx_brotli.git

#进入目录
cd ngx_brotli
# 使用 Git 子模块命令来初始化并更新 ngx_brotli 模块的依赖项:
git submodule update --init

然后可以通过两种方式来设置配置。

方式一:动态加载

$ cd nginx-1.x.x
$ ./configure --with-compat --add-dynamic-module=/path/to/ngx_brotli
$ make modules

您需要使用与 Nginx 配置完全相同的./configure参数并附加到–with-compat --add-dynamic-module=/path/to/ngx_brotli末尾,否则您将在启动时收到“模块不兼容二进制”错误。您可以运行nginx -V以获取 Nginx 安装的配置参数。

make modules将导致在ngx_http_brotli_filter_module.so和目录ngx_http_brotli_static_module.so中objs。复制这些内容,/usr/lib/nginx/modules/然后将指令添加load_module到nginx.conf(http 块上方):

load_module modules/ngx_http_brotli_filter_module.so;
load_module modules/ngx_http_brotli_static_module.so;
  • 查看编译好的模块
ls objs/*.so
modules/ngx_http_brotli_filter_module.so; 
modules/ngx_http_brotli_static_module.so;
  • 拷贝so文件到/etc/nginx/modules下,并配置load_module动态加载so文件,nginx.conf,注意放置位置,必须在events配置前
# user root fix 403
user root;
worker_processes  auto;
# Brotli模块
load_module modules/ngx_http_brotli_filter_module.so;
load_module modules/ngx_http_brotli_static_module.so;
events {
    worker_connections  1024;
}
http {

}

方式二:静态编译

  • 进入 Nginx 源代码目录(/path/to/nginx_source/)并执行以下命令来配置编译 Nginx 并添加 ngx_brotli 模块:
cd /path/to/nginx_source/
./configure --add-module=/path/to/ngx_brotli

替换 /path/to/nginx_source/ 为你实际的 Nginx 源代码目录路径,将 /path/to/ngx_brotli 替换为 ngx_brotli 模块的实际路径。

  • 使用 make 命令编译 Nginx 及 ngx_brotli 模块并安装编译完成的 Nginx:
make && make install

这会将模块直接编译到 Nginx 中。

配置好之后重新启动nginx

nginx -t && nginx -s reload

启用Brotli压缩

最后需要在配置文件中配置一下就ok啦。nginx中br压缩常见配置如下:

http {
  # 启用 Brotli 压缩
  brotli on;

  # 设置 Brotli 压缩级别
  brotli_comp_level 6;

  # 设置启用压缩的最小文件大小
  brotli_min_length 20;

  # 指定要压缩的文件类型
  brotli_types text/plain text/css application/javascript;

  # 配置 Brotli 压缩的缓冲区大小
  brotli_buffers 16 8k;

  # 其他的 Nginx 配置项...
}

常用的配置项:

  • brotli on;: 启用 Brotli 压缩。

  • brotli_comp_level: 设置 Brotli 压缩级别,范围从 1 到 11。级别越高,压缩率越高,但消耗的 CPU 资源也越多。默认值是 6。

  • brotli_min_length: 设置启用 Brotli 压缩的最小文件大小。小于该大小的文件将不会被压缩。默认值是 20 字节。

  • brotli_types: 指定要进行 Brotli 压缩的文件类型。可以使用 MIME 类型、文件扩展名或正则表达式来匹配文件类型。多个类型可以使用空格分隔或放置在不同的 brotli_types 指令中。任意类型用*

  • brotli_buffers: 设置用于 Brotli 压缩的缓冲区大小。默认情况下,Nginx 会自动选择合适的缓冲区大小。

可参考一下内容:

Nginx官方对brotli详细介绍
brotli配置相关

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

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

相关文章

2.4g无线芯片G350产品介绍

G350是一款2.4GHz的无线收发芯片,具有低成本和高集成度的特点。它集成了发射机、接收机、频率综合器和GFSK调制解调器,为无线通信系统提供了完整的解决方案。 该芯片采用了低功耗设计,在各个环节都降低功耗以提高电池使用寿命。即使在最低电流…

STM32 Proteus UCOSII系统简易时钟计时系统-0054

STM32 Proteus UCOSII系统简易时钟计时系统-0054 Proteus仿真小实验: STM32 Proteus UCOSII系统简易时钟计时系统-0054 功能: 硬件组成:STM32F103R6单片机 LCD1602显示器 1.单片机程序使用UCOSII操作系统,显示任务、时间计算任…

【Python 随练】学用 line 函数画直线

题目: 画图,学用line函数画直线。 简介: 在本篇博客中,我们将介绍如何使用Python的绘图库来画直线。我们将使用line函数来绘制直线,并提供一个完整的代码示例来演示其用法。 绘制直线: 要绘制直线&…

开源项目管理工具Plane

本文软件由网友 不长到一百四誓不改名 推荐,不过这次是在他推荐之前,就已经完成了的 🙂 什么是 Plane ? Plane 是一个简单的、可扩展的、开源的项目和产品管理工具。它允许用户从一个基本的任务跟踪工具开始,逐步采用各…

初步学习使用SpringBoot框架

对于SpringBoot框架介绍大家可以看看这个这篇文章,SpringBoot优缺点以及如何安装使用 以下我是按照老师给的安装方法进行安装使用SpringBoot框架: 大家安装SpringBoot框架时候,最好安装3.0以下的,不然需要对应较高版本的JDK版本&…

导航栏,封装Api接口,数据处理 过滤器,Echarts使用(二)

文章目录 一、左侧导航栏El的元素颜色重写导航开启router模式导航栏折叠(兄弟页面传数据 借助父亲) 二、封装请求的Api接口接口地址管理配置跨域 三、数据处理 过滤器四、使用EchartsDemo: 使用 ECharts项目中使用Echarts 接上篇(一&#xff…

时序预测 | MATLAB实现BO-NARX贝叶斯优化非线性自回归外生模型股票价格预测

时序预测 | MATLAB实现BO-NARX贝叶斯优化非线性自回归外生模型股票价格预测 目录 时序预测 | MATLAB实现BO-NARX贝叶斯优化非线性自回归外生模型股票价格预测效果一览基本介绍研究过程程序设计参考资料效果一览

好视力、南卡、欧普护眼台灯哪个护眼效果更出色?看完这篇测评你就明白了

现在的孩子,学习任务都非常繁重,想想我们小时候基本上没什么作业,但是现在的孩子感觉每天都有做不完的功课和试卷,除此之外,还有家长给报的各种学习班、技艺班,为了一个更好的前途,这也是没办法…

office 2003 default regedit

office版本这么多,感觉还是2003简单,唉 "D:\Microsoft-Office-2003\OFFICE11\EXCEL.EXE" /regserver "D:\Microsoft-Office-2003\OFFICE11\WINPROJ.EXE" /regserver "D:\Microsoft-Office-2003\OFFICE11\POWERPNT.exe" /r…

IDEA恢复误删除的文件

idea将删除的文件放在idea文件缓存中,文件的更改等信息都放在这个缓存中,所以短时间内删除的文件可以尝试恢复。

每日一面系列-spring中@Autowired 和 @Resource 区别?

Autowired注解是由Spring提供的,它可以用来对构造方法、成员变量及方法参数进行标注,它能够根据对象类型完成自动注入,代码如下。 public class Service {// 构造方法注入 Autowired public Service(Service service) { this.s…

0122 绪论

目录 1.绪论 1.1数据结构的基本概念 1.1部分习题 1.2算法和算法评价 1.2部分习题 1.绪论 1.1数据结构的基本概念 数据:信息的载体 数据元素:数据的基本单位,由若干数据项组成 数据项:构成数据元素的不可分割的最小单位 数…

leetcode-060-排列序列

题目及测试 package pid060; /* 60. 排列序列 给出集合 [1,2,3,...,n],其所有元素共有 n! 种排列。按大小顺序列出所有排列情况,并一一标记,当 n 3 时, 所有排列如下:"123" "132" "213" "23…

银行数字化转型导师坚鹏:银行数字化营销面临的5大痛点

银行数字化营销在助力银行业实现转型与发展的同时,也面临一些痛点问题。以下是银行数字化营销必须解决的五大痛点: 1) 数据质量和完整性:银行在数字化营销中需要利用大数据技术,但数据质量和完整性仍然是一个关键问题。银行需要确…

最强的″矛″ 验关键的″盾″|赛宁数字孪生靶场验证湖南工业互联网安全

​​为深入推动“智赋万企”数字安全屏障工程,由工业和信息化部网络安全管理局指导,湖南省工信厅和湖南省通管局主办的“铸网—2023”湖南省工业互联网企业网络安全实战攻防演练,于近日圆满收官。赛宁网安以数字孪生靶场为基础,构…

SpringMVC (八) 拦截器+文件上传下载

学习回顾:SpringMVC (七) Ajax研究 概述 SpringMVC的处理器拦截器类似于Servlet开发中的过滤器Filter,用于对处理器进行预处理和后处理。开发者可以自己定义一些拦截器来实现特定的功能。 过滤器与拦截器的区别:拦截器是AOP思想的…

实现窗户特效的Unity Shader解析

本文将详细介绍一种使用Unity Shader实现窗户特效的方法。通过分析代码,我们将解释每个关键部分的作用,以及如何将其组合在一起以实现逼真的窗户效果。希望本文能为Shader编程初学者和Unity开发者提供一些有用的指导。 引言: 在游戏和虚拟现实…

taro 小程序自定义地图选点功能

效果: 1、添加中心点 icon, 保证icon 处于地图中间 .map-box {width: 100vw;height: 36vh;position: relative;// 中心icon.center-icon-box {position: absolute;top: calc(50% - 30rpx); // 保证icon 处于地图中心点left: 50%;transform: translate(-50%, -50%)…

JavaScript内存管理和闭包

1 JavaScript内存管理 2 垃圾回收机制算法 3 闭包的概念理解 4 闭包的形成过程 5 闭包的内存泄漏 一个函数只有调用了外部的变量&#xff0c;才算是闭包。函数内和函数外会写成闭包。 深入JS闭包-闭包的访问过程 <!DOCTYPE html> <html lang"en"> &l…

Jenkins用户权限设置和运行节点配置实战

这里写目录标题 一、Jenkins用户权限设置实战1、用户权限配置2、用户权限分配 二、Jenkins运行节点配置实战1、增加运行节点的好处2、实战B-1:添加Jenkins运行节点实战1、相关字段说明&#xff1a;2、SSH连接方式 实战B-2:配置不同类型的节点-Python 节点实战B-3:配置不同类型的…