検索
ホームページウェブフロントエンドjsチュートリアルあなたが知らない 3 つの Node.js コード最適化方法_node.js

Node.js プログラムは、CPU または入出力操作の制限により、実行速度が非常に遅くなる場合があります。 CPU の観点から見ると、プログラムの動作が遅い一般的な原因の 1 つは、最適化されていない「ホット パス」 (頻繁にアクセスされるコード) です。入出力の観点から見ると、プログラムの実行速度の制限は、基盤となるオペレーティング システムの影響を受けるか、ノード自体の障害が原因である可能性があります。または、遅いプログラムは Node 自体とは何の関係もない可能性があります。問題は、遅く最適化されていないデータベース クエリや API 呼び出しなどの外部リソースにあります。

この記事では、CPU 負荷の高い操作を引き起こすコード ベースの操作を特定し、最適化することに焦点を当てます。同時に、実稼働アプリケーションの構成ファイルが調査され、運用効率を向上させる可能性のある変更が分析されて行われます。

ノードのシングルスレッドの性質により、サーバーにとって CPU の大きな負荷を回避することが特に重要です。 CPU に費やされる時間が他のリクエストに応答するのに時間がかかるためです。このプロセス中にアプリケーションの応答が遅く、CPU 使用率が常に高いことに気付いた場合は、アプリケーションを分析することでボトルネックを特定し、アプリケーションを高速に実行できる状態に戻すことができます。

分析アプリケーション
実稼働環境で遅いプログラムを複製するのは難しく、時間がかかります。ありがたいことに、これを自分で行う必要はありません。運用サーバー上でプロファイル データを収集し、オフラインで分析できます。いくつかの分析方法を見てみましょう。

1. カーネルレベルのツールを使用します
まず、DTrace (Solaris、BSD)、perf (Linux)、または XPerf (Windows) などのカーネル レベルのツールを使用して、実行中のプロセスからスタック トレースを収集し、フレーム グラフを生成できます。カーネルレベルの分析は、実行中のプロセスへの影響を最小限に抑えます。フレーム グラフは、ズームインおよびズームアウトをサポートするコール スタックに基づいて生成されるベクター グラフィックです。 Netflix の Yunong Xiao は、Linux システムのパフォーマンスについて素晴らしいスピーチやツイートを行っており、このテクノロジへの理解を深めるのに役立ちます。実稼働アプリケーションで高いスループットを維持したい場合は、この方法の使用を検討してください。

2、

2. V8 アナライザーを使用します
もう 1 つのオプションは、V8 プロファイラーを直接使用することです。このアプローチではプロセスをプログラムと共有するため、プログラムのパフォーマンスに影響します。このため、このような問題が発生した場合には、関連する出力をキャプチャするためにのみ V8 プロファイラーを実行してください。このアプローチの利点は、Chrome のすべての分析ツールとその出力 (フレーム グラフを含む) を使用してプログラムを調査できることです。

次のコードを実行してプログラムをテストしてください:

npm install v8-profiler --save

その後、プログラムに次のコードを追加します:

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)

SIGUSR2 シグナルをこのプロセスに送信するとすぐに分析が開始されます。再度 SIGUSR2 シグナルを送信することで解析を停止できます (以下のコード)。

kill -SIGUSR2 [pid]

このプロセスの分析結果は、現在の作業パスのファイルに書き込まれます (パスが書き込み可能であることを確認してください)。これはプログラム可能なインターフェイスであるため、(Web エンドポイント、IPC などを使用して) 自由にトリガーできます。プログラムがいつ遅くなるかを予感している場合は、いつでもこのインターフェイスをトリガーできます。自動トリガーの設定は、継続的な監視を避けるのに役立ちますが、キャプチャをいつ、どのくらい継続する必要があるかを予測的に理解する必要があります。

プロファイル データが収集されたら、Chrome デベロッパー ツールにロードして分析を開始します。

3. プロセスマネージャーを使用します
V8 アナライザーを直接使用することは非常に効率的でカスタマイズ可能ですが、コード ベースに入り込み、プロジェクトに望ましくない依存関係がさらに追加されることになります。別の方法は、プロセス マネージャーを使用することです。プロセス マネージャーを使用すると、プログラムを分析する必要があるときに、さまざまなツールを使用してプログラムをラップできます。オプションのツールは、StrongLoop の SLC コマンド ライン ツールです。

まず、npm install Strongloop –g を実行し、次に次のコードを実行します:

slc start [/path/to/app]

上記のコードはプロセス マネージャーでプログラムを起動し、オンデマンドで CPU プロファイリング データを抽出できます。アプリケーション ID を確認して取得するには、次を実行します:

slc ctl

次のような結果が得られます:

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

検索アプリケーションのプロセス ID。この例では、ID は 1.1.61023 です。これで、次のコードを実行することで、いつでも分析を開始できます:

slc ctl cpu-start 1.1.61023

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

slc ctl cpu-stop 1.1.61023

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

CPU profile written to `node.1.1.61023.cpuprofile`, load into Chrome Dev Tools

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

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

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

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

声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
JavaScript in Action:実際の例とプロジェクトJavaScript in Action:実際の例とプロジェクトApr 19, 2025 am 12:13 AM

現実世界でのJavaScriptのアプリケーションには、フロントエンドとバックエンドの開発が含まれます。 1)DOM操作とイベント処理を含むTODOリストアプリケーションを構築して、フロントエンドアプリケーションを表示します。 2)node.jsを介してRestfulapiを構築し、バックエンドアプリケーションをデモンストレーションします。

JavaScriptとWeb:コア機能とユースケースJavaScriptとWeb:コア機能とユースケースApr 18, 2025 am 12:19 AM

Web開発におけるJavaScriptの主な用途には、クライアントの相互作用、フォーム検証、非同期通信が含まれます。 1)DOM操作による動的なコンテンツの更新とユーザーインタラクション。 2)ユーザーエクスペリエンスを改善するためにデータを提出する前に、クライアントの検証が実行されます。 3)サーバーとのリフレッシュレス通信は、AJAXテクノロジーを通じて達成されます。

JavaScriptエンジンの理解:実装の詳細JavaScriptエンジンの理解:実装の詳細Apr 17, 2025 am 12:05 AM

JavaScriptエンジンが内部的にどのように機能するかを理解することは、開発者にとってより効率的なコードの作成とパフォーマンスのボトルネックと最適化戦略の理解に役立つためです。 1)エンジンのワークフローには、3つの段階が含まれます。解析、コンパイル、実行。 2)実行プロセス中、エンジンはインラインキャッシュや非表示クラスなどの動的最適化を実行します。 3)ベストプラクティスには、グローバル変数の避け、ループの最適化、constとletsの使用、閉鎖の過度の使用の回避が含まれます。

Python vs. JavaScript:学習曲線と使いやすさPython vs. JavaScript:学習曲線と使いやすさApr 16, 2025 am 12:12 AM

Pythonは、スムーズな学習曲線と簡潔な構文を備えた初心者により適しています。 JavaScriptは、急な学習曲線と柔軟な構文を備えたフロントエンド開発に適しています。 1。Python構文は直感的で、データサイエンスやバックエンド開発に適しています。 2。JavaScriptは柔軟で、フロントエンドおよびサーバー側のプログラミングで広く使用されています。

Python vs. JavaScript:コミュニティ、ライブラリ、リソースPython vs. JavaScript:コミュニティ、ライブラリ、リソースApr 15, 2025 am 12:16 AM

PythonとJavaScriptには、コミュニティ、ライブラリ、リソースの観点から、独自の利点と短所があります。 1)Pythonコミュニティはフレンドリーで初心者に適していますが、フロントエンドの開発リソースはJavaScriptほど豊富ではありません。 2)Pythonはデータサイエンスおよび機械学習ライブラリで強力ですが、JavaScriptはフロントエンド開発ライブラリとフレームワークで優れています。 3)どちらも豊富な学習リソースを持っていますが、Pythonは公式文書から始めるのに適していますが、JavaScriptはMDNWebDocsにより優れています。選択は、プロジェクトのニーズと個人的な関心に基づいている必要があります。

C/CからJavaScriptへ:すべてがどのように機能するかC/CからJavaScriptへ:すべてがどのように機能するかApr 14, 2025 am 12:05 AM

C/CからJavaScriptへのシフトには、動的なタイピング、ゴミ収集、非同期プログラミングへの適応が必要です。 1)C/Cは、手動メモリ管理を必要とする静的に型付けられた言語であり、JavaScriptは動的に型付けされ、ごみ収集が自動的に処理されます。 2)C/Cはマシンコードにコンパイルする必要がありますが、JavaScriptは解釈言語です。 3)JavaScriptは、閉鎖、プロトタイプチェーン、約束などの概念を導入します。これにより、柔軟性と非同期プログラミング機能が向上します。

JavaScriptエンジン:実装の比較JavaScriptエンジン:実装の比較Apr 13, 2025 am 12:05 AM

さまざまなJavaScriptエンジンは、各エンジンの実装原則と最適化戦略が異なるため、JavaScriptコードを解析および実行するときに異なる効果をもたらします。 1。語彙分析:ソースコードを語彙ユニットに変換します。 2。文法分析:抽象的な構文ツリーを生成します。 3。最適化とコンパイル:JITコンパイラを介してマシンコードを生成します。 4。実行:マシンコードを実行します。 V8エンジンはインスタントコンピレーションと非表示クラスを通じて最適化され、Spidermonkeyはタイプ推論システムを使用して、同じコードで異なるパフォーマンスパフォーマンスをもたらします。

ブラウザを超えて:現実世界のJavaScriptブラウザを超えて:現実世界のJavaScriptApr 12, 2025 am 12:06 AM

現実世界におけるJavaScriptのアプリケーションには、サーバー側のプログラミング、モバイルアプリケーション開発、モノのインターネット制御が含まれます。 2。モバイルアプリケーションの開発は、ReactNativeを通じて実行され、クロスプラットフォームの展開をサポートします。 3.ハードウェアの相互作用に適したJohnny-Fiveライブラリを介したIoTデバイス制御に使用されます。

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

Dreamweaver Mac版

Dreamweaver Mac版

ビジュアル Web 開発ツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

mPDF

mPDF

mPDF は、UTF-8 でエンコードされた HTML から PDF ファイルを生成できる PHP ライブラリです。オリジナルの作者である Ian Back は、Web サイトから「オンザフライ」で PDF ファイルを出力し、さまざまな言語を処理するために mPDF を作成しました。 HTML2FPDF などのオリジナルのスクリプトよりも遅く、Unicode フォントを使用すると生成されるファイルが大きくなりますが、CSS スタイルなどをサポートし、多くの機能強化が施されています。 RTL (アラビア語とヘブライ語) や CJK (中国語、日本語、韓国語) を含むほぼすべての言語をサポートします。ネストされたブロックレベル要素 (P、DIV など) をサポートします。

Safe Exam Browser

Safe Exam Browser

Safe Exam Browser は、オンライン試験を安全に受験するための安全なブラウザ環境です。このソフトウェアは、あらゆるコンピュータを安全なワークステーションに変えます。あらゆるユーティリティへのアクセスを制御し、学生が無許可のリソースを使用するのを防ぎます。

SAP NetWeaver Server Adapter for Eclipse

SAP NetWeaver Server Adapter for Eclipse

Eclipse を SAP NetWeaver アプリケーション サーバーと統合します。