Heim Web-Frontend js-Tutorial 3 Node.js-Codeoptimierungsmethoden, die Sie nicht kennen_node.js

3 Node.js-Codeoptimierungsmethoden, die Sie nicht kennen_node.js

May 16, 2016 pm 03:13 PM
node.js 代码优化

Node.js-Programme können aufgrund von Einschränkungen in der CPU oder bei Ein- und Ausgabevorgängen sehr langsam ausgeführt werden. Aus CPU-Sicht ist einer der typischen Gründe, warum ein Programm langsam läuft, ein nicht optimierter „Hot Path“ (ein Codeabschnitt, auf den häufig zugegriffen wird). Aus Sicht der Eingabe und Ausgabe kann die Begrenzung der Programmlaufgeschwindigkeit durch das zugrunde liegende Betriebssystem beeinflusst werden oder auf einen Ausfall des Knotens selbst zurückzuführen sein. Oder ein langsames Programm hat möglicherweise nichts mit Node selbst zu tun. Das Problem liegt in externen Ressourcen, wie z. B. Datenbankabfragen oder API-Aufrufen, die langsam und nicht optimiert sind.

In diesem Artikel konzentrieren wir uns auf die Identifizierung und Optimierung von Vorgängen in der Codebasis, die zu einer CPU-lastigen Auslastung führen. Gleichzeitig werden Konfigurationsdateien für Produktionsanwendungen untersucht und Änderungen, die die betriebliche Effizienz verbessern können, analysiert und vorgenommen.

Aufgrund der Single-Threaded-Natur von Node ist es besonders wichtig für Server, eine hohe CPU-Last zu vermeiden. Denn die auf der CPU verbrachte Zeit nimmt Zeit in Anspruch, um auf andere Anfragen zu reagieren. Wenn Sie feststellen, dass Ihre Anwendung langsam reagiert und die CPU während dieses Vorgangs konstant hoch ist, kann die Analyse Ihrer Anwendung dabei helfen, Engpässe zu erkennen und Ihre Anwendung wieder schnell zum Laufen zu bringen.

Analyseanwendungen
Die Replikation langsamer Programme in der Produktion ist schwierig und zeitaufwändig. Zum Glück müssen Sie dies nicht selbst tun. Sie können Profildaten auf Ihrem Produktionsserver sammeln und offline analysieren. Werfen wir einen Blick auf verschiedene Analysemethoden.

1. Verwenden Sie Tools auf Kernel-Ebene
Zunächst können Sie Tools auf Kernel-Ebene wie DTrace (Solaris, BSD), perf (Linux) oder XPerf (Windows) verwenden, um Stack-Traces von einem laufenden Prozess zu sammeln und dann ein Flame-Diagramm zu generieren. Die Analyse auf Kernelebene hat nur minimale Auswirkungen auf laufende Prozesse. Das Flammendiagramm ist eine auf der Aufrufliste basierende Vektorgrafik, die das Vergrößern und Verkleinern unterstützt. Yunong Xiao von Netflix hat großartige Reden und Tweets zum Thema Perf in Linux-Systemen gehalten, um Ihnen dabei zu helfen, Ihr Verständnis dieser Technologie zu vertiefen. Wenn Sie in einer Produktionsanwendung einen hohen Durchsatz aufrechterhalten möchten, sollten Sie diese Methode in Betracht ziehen.

2,

2. Verwenden Sie den V8-Analysator
Eine weitere Möglichkeit besteht darin, den V8-Profiler direkt zu verwenden. Dieser Ansatz teilt den Prozess mit dem Programm und wirkt sich daher auf die Programmleistung aus. Aus diesem Grund führen Sie den V8-Profiler bitte nur aus, um die relevante Ausgabe zu erfassen, wenn Sie auf solche Probleme stoßen. Der Vorteil dieses Ansatzes besteht darin, dass Sie alle Analysetools von Chrome und deren Ausgabe (einschließlich Flammendiagramme) zur Untersuchung des Programms verwenden können.

Bitte führen Sie den folgenden Code aus, um Ihr Programm zu testen:

npm install v8-profiler --save
Nach dem Login kopieren

Danach fügen Sie den folgenden Code zu Ihrem Programm hinzu:

const profiler = require('v8-profiler')
const fs = require('fs')
var profilerRunning = false
function toggleProfiling () {
 if (profilerRunning) {
  const profile = profiler.stopProfiling()
  console.log('stopped profiling')
  profile.export()
   .pipe(fs.createWriteStream('./myapp-'+Date.now()+'.cpuprofile'))
   .once('error', profiler.deleteAllProfiles)
   .once('finish', profiler.deleteAllProfiles)
  profilerRunning = false
  return
 }
 profiler.startProfiling()
 profilerRunning = true
 console.log('started profiling')
}
process.on('SIGUSR2', toggleProfiling)
Nach dem Login kopieren

Sobald Sie das SIGUSR2-Signal an diesen Prozess senden, beginnt dieser mit der Analyse. Die Analyse kann durch erneutes Senden eines SIGUSR2-Signals gestoppt werden (Code unten).

kill -SIGUSR2 [pid]
Nach dem Login kopieren

Die Analyseergebnisse dieses Prozesses werden in die Datei im aktuellen Arbeitspfad geschrieben (bitte stellen Sie sicher, dass der Pfad geschrieben werden kann). Da es sich um eine programmierbare Schnittstelle handelt, können Sie diese nach Belieben auslösen (über Web-Endpunkte, IPC usw.). Wenn Sie eine Ahnung haben, wann Ihr Programm langsam werden wird, können Sie diese Schnittstelle jederzeit auslösen. Das Einrichten automatischer Auslöser ist nützlich, um eine ständige Überwachung zu vermeiden, erfordert jedoch ein vorausschauendes Verständnis darüber, wann und wie lange Erfassungen dauern sollen.

Sobald die Profildaten erfasst wurden, laden Sie sie in die Chrome Dev Tools und beginnen Sie mit der Analyse!

3. Verwenden Sie den Prozessmanager
Obwohl die direkte Verwendung des V8-Analysators sehr effizient und anpassbar ist, gelangt er in Ihre Codebasis und fügt Ihrem Projekt eine weitere Abhängigkeit hinzu, die Sie möglicherweise nicht möchten. Eine Alternative besteht darin, einen Prozessmanager zu verwenden, der Ihr Programm mit verschiedenen Tools umschließen kann, wenn Sie es analysieren müssen. Ein optionales Tool ist das SLC-Befehlszeilentool von StrongLoop.

Führen Sie zuerst npm install strongloop –g aus und führen Sie dann den folgenden Code aus:

slc start [/path/to/app]
Nach dem Login kopieren

Der obige Code startet Ihr Programm im Prozessmanager und Sie können CPU-Profilierungsdaten bei Bedarf extrahieren. Um die Anwendungs-ID zu überprüfen und abzurufen, führen Sie Folgendes aus:

slc ctl
Nach dem Login kopieren

Sie erhalten Ergebnisse ähnlich den folgenden:

Service ID: 1
Service Name: my-sluggish-app
Environment variables:
  Name   Value
  NODE_ENV production
Instances:
  Version Agent version Debugger version Cluster size Driver metadata
   5.0.1    2.0.2      1.0.0       1       N/A
Processes:
    ID   PID  WID Listening Ports Tracking objects? CPU profiling? Tracing? Debugging?
  1.1.61022 61022  0
  1.1.61023 61023  1   0.0.0.0:3000
Nach dem Login kopieren

Die Prozess-ID der Lokalisierungsanwendung. In diesem Beispiel lautet die ID 1.1.61023. Jetzt können wir jederzeit mit der Analyse beginnen, indem wir den folgenden Code ausführen:

slc ctl cpu-start 1.1.61023
Nach dem Login kopieren

当我们觉得已经捕获到了迟滞行为,就可以运行以下代码来停止分析器:

slc ctl cpu-stop 1.1.61023
Nach dem Login kopieren

以下代码将写文件至硬盘:

CPU profile written to `node.1.1.61023.cpuprofile`, load into Chrome Dev Tools
Nach dem Login kopieren

好啦,就是这样。你可以像在 V8 分析器里那样把文件加载到 Chrome 里面进一步分析。

作出正确决定
在本文中,笔者展示了三种在 Node 中捕获生产环境下 CPU 使用量的方式。那么,你应该选用哪一种呢?下面是一些帮助你缩小决策范围的想法:

  • 我需要分析很长一段时间:使用内核级工具。
  • 我想用 Chrome 开发工具:使用 V8 分析器或者过程管理器。
  • 我想捕获应用中的特定行为:使用 V8 分析器。
  • 我不想影响到程序性能:使用内核级程序
  • 我希望我不用挨个测试文件来获取程序分析信息:使用过程管理器

以上就是本文的全部内容,3种Node.js代码优化方式,希望大家可以熟练掌握。

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)
2 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
Repo: Wie man Teamkollegen wiederbelebt
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Abenteuer: Wie man riesige Samen bekommt
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 ü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!

Erfahren Sie mehr über Puffer in Node Erfahren Sie mehr über Puffer in Node Apr 25, 2023 pm 07:49 PM

Zu Beginn lief JS nur auf der Browserseite. Es war einfach, Unicode-codierte Zeichenfolgen zu verarbeiten, aber es war schwierig, binäre und nicht Unicode-codierte Zeichenfolgen zu verarbeiten. Und Binär ist das Datenformat der niedrigsten Ebene des Computer-, Video-/Audio-/Programm-/Netzwerkpakets

Ein Artikel über die effiziente Entwicklung von Node.js-Anwendungen auf der Präsentationsebene Ein Artikel über die effiziente Entwicklung von Node.js-Anwendungen auf der Präsentationsebene Apr 17, 2023 pm 07:02 PM

Wie verwende ich Node.js für die Entwicklung von Front-End-Anwendungen? Der folgende Artikel führt Sie in die Methode zur Entwicklung von Front-End-Anwendungen in Node ein, die die Entwicklung von Anwendungen auf der Präsentationsebene umfasst. Die Lösung, die ich heute geteilt habe, ist für einfache Szenarien gedacht. Sie soll es Front-End-Entwicklern ermöglichen, einige einfache serverseitige Entwicklungsaufgaben zu erledigen, ohne zu viel Hintergrundwissen und Fachwissen über Node.js beherrschen zu müssen, selbst wenn sie über keine Programmierkenntnisse verfügen Erfahrung.

Wie man Java-Code gut umgestaltet Wie man Java-Code gut umgestaltet Jun 15, 2023 pm 09:17 PM

Als eine der beliebtesten Programmiersprachen der Welt ist Java für viele Unternehmen und Entwickler zur Sprache der Wahl geworden. Allerdings ist Code-Refactoring für die Aufrechterhaltung der Codequalität und Entwicklungseffizienz von entscheidender Bedeutung. Aufgrund seiner Komplexität kann es mit der Zeit immer schwieriger werden, Java-Code zu warten. In diesem Artikel wird erläutert, wie Sie Java-Code umgestalten, um die Codequalität und Wartbarkeit zu verbessern. Verstehen Sie die Prinzipien des Refactorings. Der Zweck des Java-Code-Refactorings besteht darin, die Struktur, Lesbarkeit und Wartbarkeit des Codes zu verbessern, und nicht einfach nur „den Code zu ändern“. Weil

Leistungsoptimierung von Java Spring Boot Security: Bringen Sie Ihr System zum Fliegen Leistungsoptimierung von Java Spring Boot Security: Bringen Sie Ihr System zum Fliegen Feb 19, 2024 pm 05:27 PM

1. Codeoptimierung, um die Verwendung zu vieler Sicherheitsanmerkungen zu vermeiden: Versuchen Sie in Controller und Service, die Verwendung von @PreAuthorize und @PostAuthorize sowie anderen Anmerkungen zu reduzieren, um die Ausführungszeit des Codes zu verlängern. Abfrageanweisungen optimieren: Bei Verwendung von springDataJPA kann die Optimierung von Abfrageanweisungen die Datenbankabfragezeit verkürzen und dadurch die Systemleistung verbessern. Sicherheitsinformationen zwischenspeichern: Durch das Zwischenspeichern einiger häufig verwendeter Sicherheitsinformationen kann die Anzahl der Datenbankzugriffe verringert und die Reaktionsgeschwindigkeit des Systems verbessert werden. 2. Verwenden Sie Indizes zur Datenbankoptimierung: Durch das Erstellen von Indizes für häufig abgefragte Tabellen kann die Abfragegeschwindigkeit der Datenbank erheblich verbessert werden. Protokolle und temporäre Tabellen regelmäßig bereinigen: Protokolle und temporäre Tabellen regelmäßig bereinigen

See all articles