Gzip compression

为什么要Gzip信息,是因为数据传输(data transfer)。

传输一个压缩的数据占用更少的带宽,它将让用户更快。

这个的缺点是什么,压缩或者是解压一个文件,或者是一块信息消耗CPU,并不是免费的。

关键的事情是,实际上CPU和消耗的时间来压缩内容,省下的时间比消耗的成本要高得多。

有趣的事情是,可以考虑的是移动网络。

我想,当你设计一个系统时候,如果你构建一个消费级的产品,需要考虑受众。

如果用户在使用浏览器在一个快速的电脑上,有宽带网络,事情非常的不同与他们使用移动网络。

即使他们有一个好的移动网络,4G连接,甚至是5G连接,连接依然不好。

ping比较高,花费更多的时间传输数据,连接花费更长时间,丢包更多。

你想要创建一个好的用户体验,要考虑移动端的用户。

使用curl可以从服务器下载图片。

被发送的数据按照字面,是直接从硬盘上的流,发送到电脑端完全没有压缩的状态。

现在,我们想要做的事情是,想要实现让这个可配置为gzip。

如果用户端可以接受压缩的内容,我们应该在按流发送到浏览器之前压缩文件。

看看如何实现,实现一个新的中间件。

我们希望能够服务信息作为gzip。

我们需要做的第一件事情是响应。

当一个http客户端请求,它可以用gzip来处理内容。

除了加密之外,它将发送Header。

如果我们打开浏览器,Accept-Encoding请求会将客户端能够理解的内容编码方式,通常是客户端可以理解的某种压缩算法。当我们没有这个Accept-Encoding,或者有一些不能理解的东西,直接送会纯文本。

我们可以从ResponseWriter中获取头信息。

Header事实上可以接收一个逗号分隔的列表。

为什么使用一个middleware。

使用http.HandlerFunc把一个函数转化为http.Handler

--compressed告诉curl我们可以接受gzip压缩,并且自动为我们解压内容。

流化文件用gzip数据,Go有能力包裹流在一个gzip流中。

创建一个gzip的响应,如果不能接受gzip格式。调用next.ServeHttp。

ResponseWriter是一个接口,它自己有特定的方法。

只要我们实现这个ResponseWriter接口,就可以创建自己的ResponseWriter。

现在,为了获得这里的ResponseWriter。

gzip.Writer在compress/gzip包中,是Go的标准库特性。

实现了Go标准的Reader和Writer interface。

无论何时你有一个Reader或者是Writer,你可以使用,它将自动的编码或者解码流的内容,Reader或者Writer到一个zip的格式,

惯用的方法,创建一个新的ResponseWriter。

Flush,冲刷没有被发送出去的任何事情。

是一个显著的减少,大量的不同当处理不好的连接,移动连接。

服务端的开销,将使用一些CPU因为我们在压缩内容,可以寻找到一种平衡。

通常,使用gzip为你的对外的文件是一个有用的事情。

仅仅限于gzip文件,不是能够gzip任何可以被写入到body。

相关与客户端是否能够解码。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值