【发布时间】:2021-06-17 22:55:00
【问题描述】:
我在 phoenix 中有一个通道可以输出约 4KB 的数据,其中很多是高度重复的,我想知道是否有办法为该通道打开压缩。
如果我使用的是 phoenix 控制器,这看起来相当简单,但我无法确定这是否可能或在某个频道的某个地方记录。
非常感谢。
【问题讨论】:
-
我知道 gzip 可用于压缩静态内容(请参阅 endpoint.ex)不确定这是否可以以某种方式应用于通道端点?
我在 phoenix 中有一个通道可以输出约 4KB 的数据,其中很多是高度重复的,我想知道是否有办法为该通道打开压缩。
如果我使用的是 phoenix 控制器,这看起来相当简单,但我无法确定这是否可能或在某个频道的某个地方记录。
非常感谢。
【问题讨论】:
您可以为来自特定端点的响应配置 gzip 压缩。
config :app_name, AppName.Endpoint,
http: [compress: true]
【讨论】:
正如 Endersstocke 在端点配置中设置 http: [compress: true] 所回答的那样,即使对于 websockets 也是如此。但是有一些限制:
Phoenix 当前版本 (1.3.0) 或更具体:cowboy (1.1) 仅支持 websockets 的x-webkit-deflate-frame 压缩。根据我的测试,我发现只有 Safari 会发送这些请求标头,这意味着在 Chrome 上您根本不会遇到任何压缩。
因此,如果您想要permessage-deflate 压缩,您将不得不等到 Cowboy 2.0。见docs
【讨论】: