ホームページ > ウェブフロントエンド > jsチュートリアル > Node.jsノート処理モジュールの使い方の詳細説明

Node.jsノート処理モジュールの使い方の詳細説明

php中世界最好的语言
リリース: 2018-06-01 09:46:00
オリジナル
1652 人が閲覧しました

今回は、Node.js のメモ作成プロセス モジュールの使用方法について詳しく説明します。 Node.js のメモ作成プロセス モジュールを使用する際の 注意事項 について、実際のケースを見てみましょう。 。

processはグローバルオブジェクト上に存在し、

require()を使用せずに使用できます。 processモジュールは主に2つのことを行います

  1. 読み取り:プロセス情報(リソースの使用状況、動作環境、動作状況)を取得します

  2. 書き込み: プロセス操作を実行します (イベントのリッスン、タスクのスケジュール、警告の発行) リソース使用量

リソース使用量

は、このプロセスの実行によって消費されるマシン リソースを指します。たとえば、メモリの構成、cpu

memory

process.memoryUsage())
{ rss: 21848064,
 heapTotal: 7159808,
 heapUsed: 4431688,
 external: 8224 
 }
ログイン後にコピー
rss(常駐メモリ)は下図に示されています

コードセグメントは現在実行中のコードに対応します

外部はC++オブジェクトに対応します( V8 Binding で管理される JS オブジェクトを使用)、Buffer の使用など

Buffer.allocUnsafe(1024 * 1024 * 1000);
console.log(process.memoryUsage());
{ rss: 22052864,
 heapTotal: 6635520,
 heapUsed: 4161376,
 external: 1048584224 }
ログイン後にコピー

cpu

const startUsage = process.cpuUsage();
console.log(startUsage);
const now = Date.now();
while (Date.now() - now < 500);
console.log(process.cpuUsage());
console.log(process.cpuUsage(startUsage)); //相对时间
// { user: 59459, system: 18966 }
// { user: 558135, system: 22312 }
// { user: 498432, system: 3333 }
ログイン後にコピー
ログイン後にコピー
user はユーザー時間に対応し、system はシステム時間を表します

実行環境

実行ディレクトリ、ノード環境、CPU アーキテクチャ、ユーザー環境、システム プラットフォームを含む、このプロセスが実行されるホスト環境を指します

実行ディレクトリ

const startUsage = process.cpuUsage();
console.log(startUsage);
const now = Date.now();
while (Date.now() - now < 500);
console.log(process.cpuUsage());
console.log(process.cpuUsage(startUsage)); //相对时间
// { user: 59459, system: 18966 }
// { user: 558135, system: 22312 }
// { user: 498432, system: 3333 }
ログイン後にコピー
ログイン後にコピー

ノード環境

console.log(process.version)
// v9.1.0
ログイン後にコピー
ノードを取得するだけでなく、バージョン情報だけでなく、v8、zlib、libuv バージョン、その他の情報も含まれます。その場合は、process.versions を使用する必要があります

console.log(process.versions);
{ http_parser: '2.7.0',
 node: '9.1.0',
 v8: '6.2.414.32-node.8',
 uv: '1.15.0',
 zlib: '1.2.11',
 ares: '1.13.0',
 modules: '59',
 nghttp2: '1.25.0',
 openssl: '1.0.2m',
 icu: '59.1',
 unicode: '9.0',
 cldr: '31.0.1',
 tz: '2017b' }
ログイン後にコピー

cpu アーキテクチャ

console.log(`This processor architecture is ${process.arch}`);
// This processor architecture is x64
ログイン後にコピー
サポートされる値には次のものが含まれます: 'arm''arm64''ia32 ''mips''mipsel''ppc ''ppc64''s390''s390x''x32' 'x64'

'arm', 'arm64', 'ia32', 'mips', 'mipsel', 'ppc', 'ppc64', 's390', 's390x', 'x32' 'x64'

用户环境

console.log(process.env.NODE_ENV); // dev
NODE_ENV=dev node b.js
ログイン後にコピー

除了启动时的自定义信息之外,process.env还可以获得其他的用户环境信息(比如PATH、SHELL、HOME等),感兴趣的可以自己打印一下试试

系统平台

console.log(`This platform is ${process.platform}`);
This platform is darwin
ログイン後にコピー

支持的系统平台包括:'aix' 'darwin' 'freebsd' 'linux' 'openbsd' 'sunos' 'win32'ユーザー環境

console.log(process.argv)
console.log(process.argv0)
console.log(process.execArgv)
node --harmony b.js foo=bar --version
// 输出结果
[ '/Users/xiji/.nvm/versions/node/v9.1.0/bin/node',
 '/Users/xiji/workspace/learn/node-basic/process/b.js',
 'foo=bar',
 '--version' ]
node
[ '--harmony' ]
ログイン後にコピー

以外 起動時のカスタム情報に加えて、process.env は他のユーザー環境情報 (PATH、SHELL、HOME など) も取得できます。興味があれば、自分で印刷して試してみてください。

システム プラットフォーム

console.log(process.execPath);
// /Users/xxxx/.nvm/versions/node/v9.1.0/bin/node
ログイン後にコピー
サポートされているシステム プラットフォーム: 'aix' 'darwin' 'freebsd ' 'linux' 'openbsd'code> 'sunos' 'win32'

android はまだ実験段階です

実行ステータス

実行ステータスとは、起動パラメータ、実行ディレクトリ、メインファイル、PID情報、実行時間など、現在のプロセスの実行に関連する情報を指します

起動パラメータ

起動パラメータを取得するには 3 つの方法があります。 execArgv は Node.js のコマンド ライン オプションを取得します (公式 Web サイトのドキュメントを参照)

argv はコマンド ライン以外のオプションの情報を取得します、argv0 は argv[0] の値を取得します (少し異なります)

var date = new Date();
while(new Date() - date < 500) {}
console.log(process.uptime()); // 0.569
ログイン後にコピー

実行ディレクトリ

//a.js
console.log(`module A: ${process.mainModule === module}`);
//b.js
require('./a');
console.log(`module B: ${process.mainModule === module}`);
node b.js
// 输出
module A: false
module B: true
ログイン後にコピー

実行時間

console.log(`This process is pid ${process.pid}`); //This process is pid 12554
ログイン後にコピー

メインファイルrequire.mainの他に、process.mainModuleを通してモジュールを判定することもできます

process.on('beforeExit', function(code) {
 console.log('before exit: '+ code);
});
process.on('exit', function(code) {
 setTimeout(function() {
  console.log('exit: ' + code);
 }, 0);
});
a.b();
ログイン後にコピー
ログイン後にコピー
PID情報

process.on('uncaughtException', function() {
 console.log('uncaught listener');
});
process.setUncaughtExceptionCaptureCallback(function() {
 console.log('uncaught fn');
});
a.b();
// uncaught fn
ログイン後にコピー
ログイン後にコピー

リスニングイベント

    一般的に使用されるイベントには、beforeExit、exit、uncaught
  1. Exception

    、message

  2. beforeExit と exit には 2 つの点で異なります:
  3. before Exit 内部で非同期コードを実行でき、exit は同期コードのみ可能process.exit() を手動で呼び出すか、uncaptException をトリガーしてプロセスを終了すると、beforeExit イベントはトリガーされませんが、exit イベントはトリガーされます。

🎜したがって、次のコードコンソールは実行されません🎜
process.on('beforeExit', function(code) {
 console.log('before exit: '+ code);
});
process.on('exit', function(code) {
 setTimeout(function() {
  console.log('exit: ' + code);
 }, 0);
});
a.b();
ログイン後にコピー
ログイン後にコピー

当异常一直没有被捕获处理的话,最后就会触发'uncaughtException'事件。默认情况下,Node.js会打印堆栈信息到stderr然后退出进程。不要试图阻止uncaughtException退出进程,因此此时程序的状态可能已经不稳定了,建议的方式是及时捕获处理代码中的错误,uncaughtException里面只做一些清理工作(可以执行异步代码)。

注意:node的9.3版本增加了process.setUncaughtExceptionCaptureCallback方法

当process.setUncaughtExceptionCaptureCallback(fn)指定了监听函数的时候,uncaughtException事件将会不再被触发。

process.on('uncaughtException', function() {
 console.log('uncaught listener');
});
process.setUncaughtExceptionCaptureCallback(function() {
 console.log('uncaught fn');
});
a.b();
// uncaught fn
ログイン後にコピー
ログイン後にコピー

message适用于父子进程之间发送消息,关于如何创建父子进程会放在child_process模块中进行。

调度任务

process.nextTick(fn)

通过process.nextTick调度的任务是异步任务,EventLoop是分阶段的,每个阶段执行特定的任务,而nextTick的任务在阶段切换的时候就会执行,因此nextTick会比setTimeout(fn, 0)更快的执行,关于EventLoop见下图,后面会做进一步详细的讲解

发出警告

process.emitWarning('Something warning happened!', {
 code: 'MY_WARNING',
 type: 'XXXX'
});
// (node:14771) [MY_WARNING] XXXX: Something warning happened!
ログイン後にコピー

当type为DeprecationWarning时,可以通过命令行选项施加影响

  1. --throw-deprecation抛出异常

  2. --no-deprecation 不输出DeprecationWarning

  3. --trace-deprecation 打印详细堆栈信息

process.emitWarning('Something warning happened!', {
 type: 'DeprecationWarning'
});
console.log(4);
node --throw-deprecation index.js
node --no-deprecation index.js
node --trace-deprecation index.js
ログイン後にコピー

相信看了本文案例你已经掌握了方法,更多精彩请关注php中文网其它相关文章!

推荐阅读:

怎么使用webpack3.0配置webpack-dev-server

JS反射与依赖注入使用案例分析

以上がNode.jsノート処理モジュールの使い方の詳細説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート