Brotli 是谷歌推出的开源压缩算法,比常见的Gzip更高效,它通过变种的 LZ77 算法、Huffman 编码以及二阶文本建模等方式进行数据压缩,帮我们更高效的压缩网页中的各类文件大小,提高加载速度。
==<font color=red > Brotli 压缩只在 https 下生效,因为 在 http 请求中 request header 里的 Accept-Encoding是没有 br 的,只有gzip, deflate 。并且 Brotli 和 gzip 是可以并存的,因此无需关闭 gzip,客户端可以根据其能力选择最适合的压缩算法</font>==
比如知乎就用了br压缩,虽然br压缩目前不是主流,但是它确实很高效。
下图来源于网络,从压缩比率和压缩时间来分析brotli、bzip2、gzip、xz这四种压缩算法,结果可想而知,brotli两者都位居首位
项目环境:Vue + Vite + TS
yarn add rollup-plugin-brotli -D
export default defineConfig({
plugins: [
vue(),
brotli()
]
})
yarn run build
打包后生成以.br
结尾的文件
由于nginx目前并不支持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;
# 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 {
}
make && make install
这会将模块直接编译到 Nginx 中。
配置好之后重新启动nginx
nginx -t && nginx -s reload
最后需要在配置文件中配置一下就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 配置项...
}
常用的配置项:
*
可参考一下内容:
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。