The content of this article is about what is buffer in Nodejs? The usage of buffer class in Nodejs has certain reference value. Friends in need can refer to it. I hope it will be helpful to you.
JavaScript was originally designed for browsers and has no mechanism for reading or manipulating binary data streams. The introduction of the Buffer class gives NodeJS the ability to operate file streams or network binary streams.
Basic concepts of Buffer
The memory allocation of the Buffer object is not in the heap memory of V8, but Node performs memory application at the C level, which can be understood as in the memory A part of the space is opened separately, but the allocation of memory when used is done at the Node level, and the release is also automatically controlled by the gc mechanism of v8 in Node. The basic operations of Buffer will not be described in detail here. The official documentation is very detailed.
Buffer performance comparison
Usually, during network transmission, data needs to be converted into Buffer. Let's do a performance comparison experiment.
1. Use a pure string to return to the client
const http = require('http'); let hello = '' for (var i = 0; i { res.writeHead(200); res.end(hello); }).listen(8001);
Useab -c 200 -t 100
http:// 127.0.0.1:8001/ command to perform performance testing, initiate 200 concurrent clients
using characters String, QPS can reach 4019.70, and the transmission rate is 40491.45KB per second.
2. Use Buffer. Convert the string into a Buffer object and send it to the client.
const http = require('http'); let hello = '' for (var i = 0; i { res.writeHead(200); res.end(hello); }).listen(8001);
Uncomment the Buffer conversion, also use ab -c 200 -t 100
http://127.0.0.1:8001/ test, also initiate 200 Concurrent clients.
Using Buffer, QPS reaches 7130.05, and the transfer rate is 71822.74KB per second.
The performance is 177% of the original, which greatly saves server resources.
The above comparison example is referred to "Introduction to Node JS in a Simple Way".
So the question is, why is there such a big performance improvement?
The reason is actually very simple. In NodeJS, when performing http transmission, if the returned type is string
, the string
type parameters will be Convert to Buffer and return to the client bit by bit through the Stream in NodeJS. If we directly return the Buffer type, there will be no conversion operation and direct return, which reduces the reuse rate of the CPU. This part of the logic can be found in the Node source code https://github.com/nodejs/node/blob/v10.9.0/lib/_http_outgoing.js#L612
In the above performance comparison example, string# is returned When ##, each request needs to replace
string with a Buffer and return it; when returning the Buffer directly, this Buffer is stored in the memory when we start the service, and each request is returned directly to the memory. The Buffer is enough, so the QPS increases a lot before and after using the Buffer.
Detailed explanation of the Buffer module in NodeJS_node.js
The above is the detailed content of What is buffer in Nodejs? Usage of buffer class in Nodejs. For more information, please follow other related articles on the PHP Chinese website!