cd brotli
cmake
make
(在当前目录下,会生成可执行文件brotli)
./brotli -h
项目地址:https://github.com/google/brotli
Brotli 压缩是一种由 Google 开发的数据压缩算法,最初用于 Web 页面的压缩。它是一种无损压缩算法,可将文本、图片、视频等各种类型的数据压缩到更小的体积,从而提高网站的加载速度。
Brotli 的优势
更高的压缩率:Brotli 压缩算法可以将数据压缩到更小的体积,平均压缩率可以比 Gzip 高出 20%-26%;
更好的多线程处理:Brotli 压缩算法可以同时使用多个 CPU 核心进行压缩,因此可更快地完成压缩任务。
与 Gzip 对比
压缩速度:Brotli 需要更多计算来压缩和解压缩文件,因此比 Gzip 更慢。这在一些情况下可能会影响性能,尤其是在较慢的设备上;
兼容性能:Brotli 是与现代浏览器和服务器兼容的新技术,因此在一些较旧的浏览器和服务器可能不支持。Gzip 则更为广泛支持。
应用场景
Web 服务器:在 Web 服务器上使用 Brotli 压缩可以大大减少网站的带宽使用,加速页面加载速度,减轻服务器的负载压力;
移动应用程序:移动应用程序的体积往往比较大,使用 Brotli 压缩可以将应用程序的体积压缩到更小,从而降低用户下载应用程序所需的时间和流量。
写在最后
Brotli 压缩算法是一种高效数据压缩算法,它的优势在于更高的压缩率、更好的多线程处理。Brotli 压缩最适合用于 Web 服务器和移动应用程序中,可提高网站的加载速度,并降低用户下载数据时所需的时间和流量。
Gzip 是一种数据压缩格式,它可以将文本、图像、脚本、样式表等各种类型文件压缩成较小的文件大小,从而在网络上传输更快。Gzip 压缩使用一种被称为 Lempel-Ziv 编码的算法。在该算法中重复出现的子字符串被替换为相应指针,从而减少了文件的大小,同时保留了相同内容的副本。在 Web 开发中 Gzip 通常用于压缩网站的 HTML/CSS 和 JavaScript 文件,提高页面加载速度。多数 Web 服务器和现代浏览器都支持 Gzip 压缩。
总的来说,Brotli 比 Gzip 更先进,可以提供更好的压缩率,但需要更高的计算能力。如果您需要快速加载的文件,则 Gzip 可能更为适合。
-----------------
为Nginx启用Brotli压缩算法
什么是 Brotli 压缩算法
Brotli最初发布于2015年,用于网络字体的离线压缩。Google软件工程师在2015年9月发布了包含通用无损数据压缩的Brotli增强版本,特别侧重于HTTP压缩。其中的编码器被部分改写以提高压缩比,编码器和解码器都提高了速度,流式API已被改进,增加更多压缩质量级别。新版本还展现了跨平台的性能改进,以及减少解码所需的内存。
与常见的通用压缩算法不同,Brotli使用一个预定义的120千字节字典。该字典包含超过13000个常用单词、短语和其他子字符串,这些来自一个文本和HTML文档的大型语料库。预定义的算法可以提升较小文件的压缩密度。
使用brotli替换deflate来对文本文件压缩通常可以增加20%的压缩密度,而压缩与解压缩速度则大致不变。使用Brotli进行流压缩的内容编码类型已被提议使用“br”。
另附 Brotli 算法和其他算法的性能比较:
- https://cran.r-project.org/web/packages/brotli/vignettes/benchmarks.html
- https://hacks.mozilla.org/2015/11/better-than-gzip-compression-with-brotli/
兼容性
- Google Chrome supported Brotli from version 49.
- Microsoft Edge has Brotli in Development.
- Mozilla Firefox implemented Brotli in version 44.
- Opera supports Brotli since version 36.
- Safari, no public commitment as of October 2016.
安装 Brotli 所需模块
首先安装 bagder/libbrotli
在 Shell 中依次执行如下命令:
|
|
注意:上面安装 Brotli 的方法只适用于 bfd2885 这个 commit 前的 ngx_brotli ,对于此后的版本,请直接使用下文的安装方法.
添加 google/ngx_brotli 模块并编译安装 Nginx
将 ngx_brotli 模块 clone 到本地:
|
|
更新:对于 bfd2885 后的 ngx_brotli 模块,需要在指定目录下直接克隆相应依赖而不是使用上文的 libbrotli : cd /path/to/ngx_brotli && git submodule update --init
然后在 Nginx 的 ./configure 参数后添加 --add-module=/path/to/ngx_brotli
并编译安装,示例如下:
|
在 Nginx 配置文件中开启 Brotli 算法编辑 nginx 配置文件,在 http 块中添加如下内容:
最后 问题及解决1. Nginx 编译过程报错通常错误形式类似于:
这种情况下,只要在编译 Nginx 时的 2. 编译成功后重启或重载 Nginx 时提示
|
|
|
|
|
再尝试重启 Nginx 。如果仍然报错,再执行 ldconfig
命令尝试解决。
4. 安装 libbrotli 时报错
通常都是缺少环境导致的,尝试安装以下程序解决:
|
|
测试
- https://tools.keycdn.com/brotli-test
- 用浏览器或抓包查看请求头是否包含
Content-Encoding: br