百分百源码网-让建站变得如此简单! 登录 注册 签到领金币!

主页 | 如何升级VIP | TAG标签

当前位置: 主页>网站教程>JS教程> 详解Node.js Buffer的使用
分享文章到:

详解Node.js Buffer的使用

发布时间:09/01 来源:未知 浏览: 关键词:

JavaScript 起初为阅读器而设计,没有读取或操纵二进制数据流的机制。Buffer类的引入,则让NodeJS具有操纵文件流或网络二进制流的能力。【视频教程引荐:node js教程 】

Buffer根本概念

Buffer 对象的内存分配不是在V8的堆内存中,而是Node在C++层面停止内存申请,可以懂得为在内存中独自开拓了一部分空间,但是使用时分配内存则是由Node层面完成的,开释也是由Node中v8的gc机制主动操纵。Buffer根本操纵,这里不在赘述,官方文档很具体。

Buffer机能对照

平常,网络传输中,都需要将数据转换为Buffer。下面做一个机能对照实验。

1.使用纯字符串返回给客户端

const http = require('http');

let hello = ''
for (var i = 0; i < 10240; i++) {
  hello += "a";
}

console.log(`Hello:${hello.length}`)
// hello = Buffer.from(hello);

http.createServer((req, res) => {
  res.writeHead(200);
  res.end(hello);
}).listen(8001);

使用ab -c 200 -t 100 http://127.0.0.1:8001/命令来停止机能测试,发起200个并发客户端

1.png

使用字符串,QPS可以到达4019.70,传输率为40491.45KB每秒。

2.使用Buffer。将字符串转换为Buffer对象,再发给客户端。

const http = require('http');

let hello = ''
for (var i = 0; i < 10240; i++) {
  hello += "a";
}

console.log(`Hello:${hello.length}`)
hello = Buffer.from(hello);

http.createServer((req, res) => {
  res.writeHead(200);
  res.end(hello);
}).listen(8001);

取消Buffer转换的注释,一样使用ab -c 200 -t 100 http://127.0.0.1:8001/测试,一样发起200个并发客户端

2.png

使用Buffer,QPS到达7130.05,传输率为71822.74KB每秒。
机能是本来的177%,极大的节约了效劳器资源。
上面这个对照示例参照 于《深入浅出Node JS》。

那么问题来了,为什么会有这么大的机能晋升呢?

事理其实很简便,在NodeJS中,停止http传输时,若返回的类型为string,则会将string类型的参数,转换为Buffer,通过NodeJS中的Stream流,一点点的返回给客户端。假如我们直接返回Buffer类型,就没有了转换操纵,直接返回,减少了CPU的反复使用率。这一部分逻辑见Node源码https://github.com/nodejs/node/blob/v10.9.0/lib/_http_outgoing.js#L612

在上面机能对照示例中,返回string时,每次恳求都需要将string装换成Buffer返回;而直接返回Buffer时,这个Buffer是我们启动效劳时就存置在内存中的,每次恳求直接返回内存中的Buffer即可,因此Buffer使用前后QPS晋升了许多。

因此,我们在写业务代码时,部分资源可以预先转换为Buffer类型(如js、css等静态资源文件),直接返回buffer给客户端,再比方一些文件转发的场景,将猎取到的内容贮存为Buffer直接转发,幸免额外的转换操纵。

参照 材料:

  • http://nodejs.cn/api/buffer.html
  • https://book.douban.com/subje...

本文转载自:https://segmentfault.com/a/1190000016056466

打赏

打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

百分百源码网 建议打赏1~10元,土豪随意,感谢您的阅读!

共有151人阅读,期待你的评论!发表评论
昵称: 网址: 验证码: 点击我更换图片
最新评论

本文标签

广告赞助

能出一分力是一分吧!

订阅获得更多模板

本文标签

广告赞助

订阅获得更多模板