Inhaltsverzeichnis
Grundkonzept von Buffer
Vergleich der Pufferleistung
那么问题来了,为什么会有这么大的性能提升呢?
Dann stellt sich die Frage: Warum gibt es eine so große Leistungsverbesserung?
Heim Web-Frontend js-Tutorial Detaillierte Erläuterung der Verwendung von Node.js Buffer

Detaillierte Erläuterung der Verwendung von Node.js Buffer

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

Detaillierte Erläuterung der Verwendung von Node.js Buffer

JavaScript wurde ursprünglich für Browser entwickelt und verfügt über keinen Mechanismus zum Lesen oder Bearbeiten binärer Datenströme. Die Einführung der Buffer-Klasse gibt NodeJS die Möglichkeit, Dateistreams zu betreiben oder Binärstreams zu vernetzen. [Empfohlenes Video-Tutorial: node js-Tutorial ]

Grundkonzept von Buffer

Die Speicherzuweisung des Buffer-Objekts erfolgt nicht im Heap-Speicher von V8, sondern Node führt eine Speicheranwendung auf C++-Ebene durch, was so verstanden werden kann wird separat im Speicher geöffnet Teil des Speicherplatzes, aber die Zuweisung des Speichers bei Verwendung wird durch die Knotenebene abgeschlossen, und die Freigabe wird auch automatisch durch den GC-Mechanismus von v8 im Knoten gesteuert. Die Grundfunktionen von Buffer werden hier nicht im Detail beschrieben. Die offizielle Dokumentation ist sehr detailliert.

Vergleich der Pufferleistung

Normalerweise müssen Daten während der Netzwerkübertragung in Puffer umgewandelt werden. Lassen Sie uns ein Leistungsvergleichsexperiment durchführen.

1. Verwenden Sie reine Zeichenfolgen, um zum Client zurückzukehren

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);
Nach dem Login kopieren

Verwenden Sie den Befehl ab -c 200 -t 100 http://127.0.0.1:8001/ für Leistungstests. Initiieren Sie 200 gleichzeitige Clients. ab -c 200 -t 100 http://127.0.0.1:8001/命令来进行性能测试,发起200个并发客户端

Detaillierte Erläuterung der Verwendung von Node.js Buffer

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

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

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);
Nach dem Login kopieren

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

Detaillierte Erläuterung der Verwendung von Node.js Buffer

使用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

>

Mit Strings kann QPS 4019,70 erreichen und die Übertragungsrate beträgt 40491,45 KB pro Sekunde.

  • 2. Puffer verwenden. Wandeln Sie die Zeichenfolge in ein Buffer-Objekt um und senden Sie es an den Client.
  • rrreee
  • Kommentieren Sie die Pufferkonvertierung aus, verwenden Sie auch ab -c 200 -t 100 http://127.0.0.1:8001/ zum Testen und starten Sie außerdem 200 gleichzeitige Clients

    Detaillierte Erläuterung der Verwendung von Node.js Buffer

  • Mit Buffer erreicht QPS 7130,05 und die Übertragungsrate beträgt 71822,74 KB pro Sekunde.
Die Leistung beträgt 177 % des Originals, wodurch Serverressourcen erheblich gespart werden.
Das obige Vergleichsbeispiel stammt aus „Ausführliche Erläuterung von Node JS“.

Dann stellt sich die Frage: Warum gibt es eine so große Leistungsverbesserung?

Der Grund ist eigentlich sehr einfach: Wenn in NodeJS bei der HTTP-Übertragung der zurückgegebene Typ string ist, wird der Parameter vom Typ string in Buffer konvertiert übergeben Der Stream-Stream in NodeJS wird Stück für Stück an den Client zurückgegeben. Wenn wir den Puffertyp direkt zurückgeben, gibt es keinen Konvertierungsvorgang und keine direkte Rückgabe, was die Wiederverwendungsrate der CPU verringert. Dieser Teil der Logik ist im Node-Quellcode https ://github.com/nodejs/node/blob/v10.9.0/lib/_http_outgoing.js#L612

Im Leistungsvergleichsbeispiel oben, wenn stringzurückgegeben wird >, jede Anfrage erfordert Ersetzen Sie string durch Buffer und geben Sie Buffer direkt zurück. Dieser Buffer wird im Speicher gespeichert, wenn wir den Dienst starten. Jede Anfrage kann den Buffer direkt im Speicher zurückgeben, sodass Buffer verwendet wird Das QPS vorne und hinten hat sich stark verbessert.

Daher können beim Schreiben von Geschäftscode einige Ressourcen im Voraus in Puffertypen konvertiert werden (z. B. JS, CSS und andere statische Ressourcendateien) und der Puffer kann beispielsweise in einer Datei direkt an den Client zurückgegeben werden Weiterleitungsszenarien speichern den erhaltenen Inhalt als Puffer und leiten ihn direkt weiter, um zusätzliche Konvertierungsvorgänge zu vermeiden. 🎜🎜Referenzen: 🎜🎜🎜🎜http://nodejs.cn/api/buffer.html🎜🎜🎜🎜🎜https://book.douban.com/subje...🎜🎜🎜🎜🎜🎜Dieser Artikel ist reproduziert von: https://segmentfault.com/a/1190000016056466🎜🎜🎜Weitere Kenntnisse zum Thema Programmierung finden Sie unter: 🎜Programmierlehre🎜! ! 🎜🎜

Das obige ist der detaillierte Inhalt vonDetaillierte Erläuterung der Verwendung von Node.js Buffer. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. So reparieren Sie Audio, wenn Sie niemanden hören können
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Wie man alles in Myrise freischaltet
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Ein Artikel über Speichersteuerung in Node Ein Artikel über Speichersteuerung in Node Apr 26, 2023 pm 05:37 PM

Der nicht blockierende und ereignisgesteuerte Knotendienst hat den Vorteil eines geringen Speicherverbrauchs und eignet sich sehr gut für die Verarbeitung massiver Netzwerkanforderungen. Unter der Voraussetzung massiver Anfragen müssen Probleme im Zusammenhang mit der „Speicherkontrolle“ berücksichtigt werden. 1. Der Garbage-Collection-Mechanismus und die Speicherbeschränkungen von V8 Js wird von der Garbage-Collection-Maschine gesteuert

Detaillierte grafische Erläuterung des Speichers und des GC der Node V8-Engine Detaillierte grafische Erläuterung des Speichers und des GC der Node V8-Engine Mar 29, 2023 pm 06:02 PM

Dieser Artikel vermittelt Ihnen ein detailliertes Verständnis des Speichers und Garbage Collectors (GC) der NodeJS V8-Engine. Ich hoffe, er wird Ihnen hilfreich sein!

Lassen Sie uns ausführlich über das File-Modul in Node sprechen Lassen Sie uns ausführlich über das File-Modul in Node sprechen Apr 24, 2023 pm 05:49 PM

Das Dateimodul ist eine Kapselung der zugrunde liegenden Dateioperationen, wie z. B. Lesen/Schreiben/Öffnen/Schließen/Löschen von Dateien, Hinzufügen usw. Das größte Merkmal des Dateimoduls besteht darin, dass alle Methoden zwei Versionen von **synchronem** und **bereitstellen. asynchron**, mit Methoden mit dem Suffix sync sind alle Synchronisationsmethoden, und diejenigen ohne sind alle heterogene Methoden.

Lassen Sie uns darüber sprechen, wie Sie das beste Node.js-Docker-Image auswählen. Lassen Sie uns darüber sprechen, wie Sie das beste Node.js-Docker-Image auswählen. Dec 13, 2022 pm 08:00 PM

Die Auswahl eines Docker-Images für Node mag trivial erscheinen, aber die Größe und potenziellen Schwachstellen des Images können erhebliche Auswirkungen auf Ihren CI/CD-Prozess und Ihre Sicherheit haben. Wie wählen wir also das beste Node.js-Docker-Image aus?

Node.js 19 ist offiziell veröffentlicht, lassen Sie uns über seine 6 Hauptfunktionen sprechen! Node.js 19 ist offiziell veröffentlicht, lassen Sie uns über seine 6 Hauptfunktionen sprechen! Nov 16, 2022 pm 08:34 PM

Node 19 wurde offiziell veröffentlicht. Dieser Artikel wird Ihnen eine detaillierte Erklärung der 6 Hauptfunktionen von Node.js 19 geben. Ich hoffe, er wird Ihnen hilfreich sein!

Lassen Sie uns über den GC-Mechanismus (Garbage Collection) in Node.js sprechen Lassen Sie uns über den GC-Mechanismus (Garbage Collection) in Node.js sprechen Nov 29, 2022 pm 08:44 PM

Wie führt Node.js GC (Garbage Collection) durch? Der folgende Artikel führt Sie durch.

Lassen Sie uns über die Ereignisschleife in Node sprechen Lassen Sie uns über die Ereignisschleife in Node sprechen Apr 11, 2023 pm 07:08 PM

Die Ereignisschleife ist ein grundlegender Bestandteil von Node.js und ermöglicht die asynchrone Programmierung, indem sie sicherstellt, dass der Hauptthread nicht blockiert wird. Das Verständnis der Ereignisschleife ist für die Erstellung effizienter Anwendungen von entscheidender Bedeutung. Der folgende Artikel wird Ihnen ein detailliertes Verständnis der Ereignisschleife in Node vermitteln. Ich hoffe, er wird Ihnen hilfreich sein!

Was soll ich tun, wenn der Knoten den Befehl npm nicht verwenden kann? Was soll ich tun, wenn der Knoten den Befehl npm nicht verwenden kann? Feb 08, 2023 am 10:09 AM

Der Grund, warum der Knoten den Befehl npm nicht verwenden kann, liegt darin, dass die Umgebungsvariablen nicht richtig konfiguriert sind. Die Lösung ist: 1. Öffnen Sie „Systemeigenschaften“ 2. Suchen Sie nach „Umgebungsvariablen“ -> „Systemvariablen“ und bearbeiten Sie dann die Umgebung Variablen; 3. Suchen Sie den Speicherort des NodeJS-Ordners. 4. Klicken Sie auf „OK“.

See all articles