优雅的读取http请求或响应的数据
发布时间:2019-01-31 03:33:43 所属栏目:教程 来源:戚银
导读:从 http.Request.Body 或 http.Response.Body 中读取数据要领或者许多,尺度库中大大都行使 ioutil.ReadAll 要领一次读取全部数据,假如是 json 名目标数据还可以行使 json.NewDecoder 从 io.Reader 建设一个理会器,倘使行使 pprof 来说明措施老是会发明
以上是尺度库 ioutil.ReadAll 的代码,每次会建设一个 var buf bytes.Buffer 而且初始化 buf.Grow(int(capacity)) 的巨细为 bytes.MinRead, 这个值呢就是 512,按这个 buffer 的巨细读取一次数据必要分派 2~16 次内存,天啊的确不能忍,我本身建设一个 buffer 好欠好。 看一下火焰图🔥吧,个中红框标志的就是 ioutil.ReadAll 的部门,颜色较量艳丽。 优化读取要领 本身建设足够大的 buffer 镌汰由于容量不足导致的多次扩容题目。
恩恩这样应该差不多了,为啥是初始化 4096 的巨细,这是个均值,纵然比 4096 大根基也就多分派一次内存即可,并且大大都数据都是比 4096 小的。 可是这样真的就算好了吗,虽然不能这样,这个 buffer 个每哀求都要建设一次,是不是应该思量一下复用呢,行使 sync.Pool 成立一个缓冲池结果就更好了。 以下是优化读取哀求的简化代码:
(编辑:湖南网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |