创建预压缩 [Brotli] 文件的工具

创建预压缩 [Brotli] 文件的工具

我正在尝试在指定目录中为静态 html、css 和 js 文件预生成压缩的 brotli 文件。

我在这里找到了一个防锈工具 –https://github.com/neosmart/static-compress

除此之外,W3TC WordPress 插件中还有一个选项。但是,尽管 brotli PHP 模块已加载并可用,但 W3TC 并未创建单独的 gzip 或 brotli 文件。

我曾经有过即时压缩功能,但现在该选项不再存在了。

我想过创建一个 bash 脚本并让它每 6 小时左右运行一次,但是后来我意识到它可能并不像看起来那么简单,因为在某些情况下原始文件可能会发生变化,并且文件夹中可能已经有一个属于原始文件(源文件)的先前版本的 .br 文件等等。

看起来除了 W3TC 之外没有其他 WordPress 插件可以做到这一点,而且 W3TC 在这方面似乎存在缺陷 [我已经在浏览器缓存部分启用了 brotli 压缩并且启用了预加载,但已经 12 个小时了,甚至没有一个缓存文件在服务器缓存目录中有相应的 br 或 gz 版本]。

答案1

lsyncd是一个监视指定目录中文件变化的工具。如果检测到变化,它可以运行任何命令。

因此,可以将其设置为监视 HTML 目录,并在brotli每次文件发生变化时对其进行运行。

它需要一些 LUA 编程来实际实现该功能。

inotify-tools可能是另一个可用于此目的的工具。

最可靠的方法是为您的文件设置适当的部署流程。部署流程从您的代码存储库中获取文件,然后执行任何所需的操作,例如压缩。之后,它将文件复制到服务器。设置它比使用上述基于 inotify 的解决方案需要更多的努力。但是,它允许在部署期间最大限度地灵活地自动化操作。

答案2

这取决于您的操作系统。

对于 CentOS/RHEL,执行所需操作的规范工具是包brotli中找到的程序brotlibrotli -h输出:

Usage: brotli [OPTION]... [FILE]...
Options:
  -#                          compression level (0-9)
  -c, --stdout                write on standard output
  -d, --decompress            decompress
  -f, --force                 force output file overwrite
  -h, --help                  display this help and exit
  -j, --rm                    remove source file(s)
  -k, --keep                  keep source file(s) (default)
  -n, --no-copy-stat          do not copy source file(s) attributes
  -o FILE, --output=FILE      output file (only if 1 input file)
  -q NUM, --quality=NUM       compression level (0-11)
  -t, --test                  test compressed file integrity
  -v, --verbose               verbose mode
  -w NUM, --lgwin=NUM         set LZ77 window size (0, 10-24)
                              window size = 2**NUM - 16
                              0 lets compressor choose the optimal value
  --large_window=NUM          use incompatible large-window brotli
                              bitstream with window size (0, 10-30)
                              WARNING: this format is not compatible
                              with brotli RFC 7932 and may not be
                              decodable with regular brotli decoders
  -S SUF, --suffix=SUF        output file suffix (default:'.br')
  -V, --version               display version and exit
  -Z, --best                  use best compression level (11) (default)
Simple options could be coalesced, i.e. '-9kf' is equivalent to '-9 -k -f'.
With no FILE, or when FILE is -, read standard input.
All arguments after '--' are treated as files.

我意识到事情可能没有看起来那么简单,因为有些情况下原始文件可能会发生变化

当然,你的脚本应该检查原始文件的修改时间,在更改时重新创建 brotli 版本等

相关内容