优雅的读取http请求或响应的数据
发布时间:2019-01-30 08:24:14 所属栏目:教程 来源:戚银
导读:从 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 建立一个缓冲池效果就更好了。 以下是优化读取请求的简化代码:
(编辑:青岛站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- 5G发牌一周年:行业应用加速融合 超高清、VR/AR将率先爆发
- Oculus Quest获得“原型版本”级别的OpenXR支持
- office2019专业增强版怎么激活 教你免费运用它
- 从7600万个5G连接中,我们发现了7种最有前景的5G物联网应用
- Pico针对海外市场发布企业版VR一体机Pico Neo 2、Pico Neo
- VR进入北京城市副中心建筑工地 施工人员实景体验增强安全意
- 一文讲弄懂什么是vlan、三层交换机、网关、DNS、子网掩码、
- VR游戏《SWORDS of GARGANTUA Tesaract Abyss》将于4月登陆
- 丹麦VR内容厂商MeetinVR发布VR协作平台MeetinVR公测版
- 关于边缘计算,你可以了解的更多一点