hostbybelle/compressionbuffer

CompressionBuffer 为 PHP 在任何 Web 服务器上提供对 zstd、brotli 和 gzip 输出缓冲的简单访问。

1.1.0 2024-04-21 17:15 UTC

This package is auto-updated.

Last update: 2024-09-28 09:54:51 UTC


README

PHPStan Level Unit Tests Packagist Downloads Packagist Version

CompressionBuffer

CompressionBuffer 为 PHP 在任何 Web 服务器上提供对 zstdbrotligzip 输出缓冲的简单访问。您甚至可以在 PHP 开发服务器上获得 zstd 输出压缩

特性

  • 尊重客户端发送的 Accept-Encoding 标头,包括为每种压缩方法指定的优先级。
  • 允许在任何 Web 服务器上使用 zstdbrotligzipdeflate 压缩方法。
  • 所有包含的压缩方法都已根据速度和大小减少的理想平衡精心选择的压缩级别进行了基准测试。
  • 根据客户端标头和可用的 PHP 扩展自动选择压缩方法。
  • 自动发送适当的标头。

要求

  • 使用输出缓冲的 PHP 应用程序。
  • PHP 8.0 或更高版本。
  • 如果您想使用 brotli 压缩,则需要 ext-brotli
  • 如果您想使用 zstd 压缩,则需要 ext-zstd
  • 如果您想使用 gzip / deflate 压缩,则需要 ext-zlib

安装 & 使用

通过 composer 安装

composer require hostbybelle/compressionbuffer

在您的应用程序中启用

<?php
use HostByBelle\CompressionBuffer;

require 'vendor/autoload.php';

CompressionBuffer::setUp(); // Have compressionBuffer detect & sort the compression methods
ob_start([CompressionBuffer::class, 'handler']); // Register it

// Send some content to the output buffer
echo "Lorem ipsum dolor sit amet, consectetur adipiscing elit,";

// Finally send it to the browser & let CompressionBuffer do it's magic.
ob_end_flush();

切换 CompressionBuffer 的状态

CompressionBuffer::enable(); // Enable output compression (enabled by default)
CompressionBuffer::disable(); // Disable output compression
CompressionBuffer::isEnabled(); // Check if it's currently enabled or not

压缩方法测试 & 结果

压缩方法,排名

  1. zstd 是最快的,效率最高的压缩方法。在其最低级别,它将比 gzip 快 4.5 倍,同时输出小 5%。当与 gzip 在其最快设置上匹配时,zstd 将产生 10% 更小的输出。
  2. brotli 是两种替代方案之间的良好中间方案。其最低设置仍然比 gzip 快 3 倍,同时输出小 5%。它将产生与 zstd 相似的整体压缩级别,但速度较慢。仍然是一个不错的选择。
  3. gzip 是长期存在、经过验证的压缩方法,但与新的替代方案相比速度较慢,并且在此过程中将产生更大的输出。

这些统计数据是基于我们在一个 包含《战争与和平》的 4mb HTML 文档 上进行的一些简单测试。这个选择受到了 jab4/zstdtest 的启发,代表了服务器可能提供的大型文档。我们对小型文档的测试表明,所有三种压缩方法都具有非常相似的压缩级别和整体处理时间。

我们的测试结果可以在 这里在 Google Sheets 上找到

使用的压缩级别

  • zstd: 级别 3。级别 4 也是一个不错的选择,因为它仍然比其他选项快,但在级别 3 时,zstd 在速度上远远超过其他选项,同时与它们在整体压缩级别上保持一致,而级别 4 的速度仅为级别 3 的 38%,而压缩量只增加了 .4%。
  • brotli:级别 3。级别 4 可以显著提高压缩级别,但需要 3 倍的时间。在级别 3 下,brotli 提供的压缩级别与 gzip 类似,但速度约为 4.5 倍。
  • gzip:选择级别 4,因为这是在 gzip 速度迅速下降到几乎无法使用之前最高的级别。这会略微降低整体压缩级别,但有助于保持应用程序响应时间快。