我正在尝试在指定目录中为静态 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
中找到的程序brotli
。brotli -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 版本等