查看源代码 Phoenix.Digester.Compressor 行为 (Phoenix v1.7.14)
定义了用于实现静态文件压缩器的 Phoenix.Digester.Compressor
行为。
自定义压缩器需要实现 2 个函数。
默认情况下,Phoenix 仅使用 Phoenix.Digester.Gzip
来压缩静态文件,但可以定义其他压缩器并将其添加到摘要过程中。
示例
如果您想使用外部 Brotli 压缩库来压缩文件,您可以定义一个实现该行为的新模块,并将该模块添加到配置的 Phoenix 静态压缩器列表中。
defmodule MyApp.BrotliCompressor do
@behaviour Phoenix.Digester.Compressor
def compress_file(file_path, content) do
valid_extension = Path.extname(file_path) in Application.fetch_env!(:phoenix, :gzippable_exts)
{:ok, compressed_content} = :brotli.encode(content)
if valid_extension && byte_size(compressed_content) < byte_size(content) do
{:ok, compressed_content}
else
:error
end
end
def file_extensions do
[".br"]
end
end
# config/config.exs
config :phoenix,
static_compressors: [Phoenix.Digester.Gzip, MyApp.BrotliCompressor],
# ...