Home  >  Article  >  Web Front-end  >  What is buffer in Nodejs? Usage of buffer class in Nodejs

What is buffer in Nodejs? Usage of buffer class in Nodejs

不言
不言Original
2018-08-18 11:03:462589browse

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

What is buffer in Nodejs? Usage of buffer class in Nodejs

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.

What is buffer in Nodejs? Usage of buffer class in Nodejs

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.

Therefore, when we write business code, some resources can be converted into Buffer types (such as js, css and other static resource files) in advance, and the buffer can be directly returned to the client. For example, in some file forwarding scenarios, The obtained content is stored in a Buffer and forwarded directly to avoid additional conversion operations.

Related recommendations:

Detailed explanation of the Buffer module in NodeJS_node.js

##What is the buffer Buffer in NodeJS and Detailed explanation of usage examples

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!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn