Table of Contents
Basic concept of Buffer
Buffer performance comparison
So the question is, why is there such a big performance improvement?
Home Web Front-end JS Tutorial Detailed explanation of the use of Node.js Buffer

Detailed explanation of the use of Node.js Buffer

Aug 29, 2020 am 10:23 AM
buffer node.js

Detailed explanation of the use of Node.js Buffer

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. [Video tutorial recommendation: node js tutorial]

Basic concept of Buffer

The memory allocation of the Buffer object is not in the heap memory of V8, but is done by Node at the C level Memory application can be understood as a separate space in the memory, but the allocation of memory during use is completed by 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 < 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);
Copy after login

Use ab -c 200 -t 100 http ://127.0.0.1:8001/ command to perform performance testing, initiate 200 concurrent clients

Detailed explanation of the use of Node.js Buffer

Using strings, 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(&#39;http&#39;);

let hello = &#39;&#39;
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);
Copy after login

Uncomment the Buffer conversion, also use ab -c 200 -t 100 http://127.0.0.1:8001/ test, also initiate 200 Concurrent clients

Detailed explanation of the use of Node.js Buffer

Use 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 converted into Buffer , returned to the client bit by bit through the Stream 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 codehttps://github.com/nodejs/node/blob/v10.9.0/lib/_http_outgoing.js#L612

In the above performance comparison example, When returning string, 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. Each request can directly return the Buffer in the memory, so the QPS before and after using the Buffer is improved a lot.

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.

Reference:

This article is reproduced from: https://segmentfault.com/a/1190000016056466

For more programming-related knowledge, please visit: Programming Teaching! !

The above is the detailed content of Detailed explanation of the use of Node.js Buffer. For more information, please follow other related articles on the PHP Chinese website!

Statement of this Website
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

Hot AI Tools

Undresser.AI Undress

Undresser.AI Undress

AI-powered app for creating realistic nude photos

AI Clothes Remover

AI Clothes Remover

Online AI tool for removing clothes from photos.

Undress AI Tool

Undress AI Tool

Undress images for free

Clothoff.io

Clothoff.io

AI clothes remover

AI Hentai Generator

AI Hentai Generator

Generate AI Hentai for free.

Hot Article

R.E.P.O. Energy Crystals Explained and What They Do (Yellow Crystal)
3 weeks ago By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Best Graphic Settings
3 weeks ago By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. How to Fix Audio if You Can't Hear Anyone
3 weeks ago By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: How To Unlock Everything In MyRise
1 months ago By 尊渡假赌尊渡假赌尊渡假赌

Hot Tools

Notepad++7.3.1

Notepad++7.3.1

Easy-to-use and free code editor

SublimeText3 Chinese version

SublimeText3 Chinese version

Chinese version, very easy to use

Zend Studio 13.0.1

Zend Studio 13.0.1

Powerful PHP integrated development environment

Dreamweaver CS6

Dreamweaver CS6

Visual web development tools

SublimeText3 Mac version

SublimeText3 Mac version

God-level code editing software (SublimeText3)

An article about memory control in Node An article about memory control in Node Apr 26, 2023 pm 05:37 PM

The Node service built based on non-blocking and event-driven has the advantage of low memory consumption and is very suitable for handling massive network requests. Under the premise of massive requests, issues related to "memory control" need to be considered. 1. V8’s garbage collection mechanism and memory limitations Js is controlled by the garbage collection machine

Detailed graphic explanation of the memory and GC of the Node V8 engine Detailed graphic explanation of the memory and GC of the Node V8 engine Mar 29, 2023 pm 06:02 PM

This article will give you an in-depth understanding of the memory and garbage collector (GC) of the NodeJS V8 engine. I hope it will be helpful to you!

Let's talk in depth about the File module in Node Let's talk in depth about the File module in Node Apr 24, 2023 pm 05:49 PM

The file module is an encapsulation of underlying file operations, such as file reading/writing/opening/closing/delete adding, etc. The biggest feature of the file module is that all methods provide two versions of **synchronous** and **asynchronous**, with Methods with the sync suffix are all synchronization methods, and those without are all heterogeneous methods.

Let's talk about how to choose the best Node.js Docker image? Let's talk about how to choose the best Node.js Docker image? Dec 13, 2022 pm 08:00 PM

Choosing a Docker image for Node may seem like a trivial matter, but the size and potential vulnerabilities of the image can have a significant impact on your CI/CD process and security. So how do we choose the best Node.js Docker image?

Node.js 19 is officially released, let's talk about its 6 major features! Node.js 19 is officially released, let's talk about its 6 major features! Nov 16, 2022 pm 08:34 PM

Node 19 has been officially released. This article will give you a detailed explanation of the 6 major features of Node.js 19. I hope it will be helpful to you!

Let's talk about the GC (garbage collection) mechanism in Node.js Let's talk about the GC (garbage collection) mechanism in Node.js Nov 29, 2022 pm 08:44 PM

How does Node.js do GC (garbage collection)? The following article will take you through it.

Let's talk about the event loop in Node Let's talk about the event loop in Node Apr 11, 2023 pm 07:08 PM

The event loop is a fundamental part of Node.js and enables asynchronous programming by ensuring that the main thread is not blocked. Understanding the event loop is crucial to building efficient applications. The following article will give you an in-depth understanding of the event loop in Node. I hope it will be helpful to you!

What should I do if node cannot use npm command? What should I do if node cannot use npm command? Feb 08, 2023 am 10:09 AM

The reason why node cannot use the npm command is because the environment variables are not configured correctly. The solution is: 1. Open "System Properties"; 2. Find "Environment Variables" -> "System Variables", and then edit the environment variables; 3. Find the location of nodejs folder; 4. Click "OK".

See all articles