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);
Use ab -c 200 -t 100
http ://127.0.0.1:8001/ command to perform performance testing, initiate 200 concurrent clients
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('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);
Uncomment the Buffer conversion, also use ab -c 200 -t 100
http://127.0.0.1:8001/ test, also initiate 200 Concurrent clients
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!

Hot AI Tools

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Undress AI Tool
Undress images for free

Clothoff.io
AI clothes remover

AI Hentai Generator
Generate AI Hentai for free.

Hot Article

Hot Tools

Notepad++7.3.1
Easy-to-use and free code editor

SublimeText3 Chinese version
Chinese version, very easy to use

Zend Studio 13.0.1
Powerful PHP integrated development environment

Dreamweaver CS6
Visual web development tools

SublimeText3 Mac version
God-level code editing software (SublimeText3)

Hot Topics



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

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!

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.

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 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!

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

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!

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".
