Timers和进程在Client里的性能表现实战心得【Node.js】

简介: Timers和进程在Client里的性能表现实战心得【Node.js】

Timers 计时器

Node通过ChildProcess类提供了全面的popen(3)函数。程序可以通过子流程的标准输入(stdin)、标准输出(stdout)和标准错误输出(stderr)以完全无阻塞的形式传输数据。
您可以使用require('child_process')spawn()创建子进程。每个子流程总是有三个流对象:child-stdin、child。标准和子标准错误每个ChildProcess类也是一个事件触发器。

var spawn = require('child_process').spawn,
grep = spawn('grep', ['ssh']);
console.log('Spawned child pid: ' + grep.pid);
grep.stdin.end();

Cwd可以用于指定新进程的工作目录,env可以指定新进程可见的环境变量,customFds可以将新进程的[stdin,stdout,stderr]绑定到指定的流,-1表示创建新的流。
示例:执行命令'ls-lh/usr'并捕获标准输出、标准错误输出和退出代码(程序退出时主函数返回的代码)。

var sys = require('sys'),
spawn = require('child_process').spawn,
ls = spawn('ls', ['-lh', '/usr']);
ls.stdout.on('data', function (data) {
sys.print('stdout: ' + data);
});
ls.stderr.on('data', function (data) {
sys.print('stderr: ' + data);
});
ls.on('exit', function (code) {
console.log('child process exited with code ' + code);
});

如果超时大于0,节点将终止运行时间超过超时(毫秒)的子进程。子进程将被终止信号终止(默认值为“SIGKILL”)。MaxBuffer指定stdout和stderr的最大可缓存数据大小。如果超过此值,子流程将终止。

var spawn = require('child_process').spawn,
grep = spawn('grep', ['ssh']);
grep.on('exit', function (code, signal) {
console.log('child process terminated due to receipt of signal '+signal);
});
// send SIGHUP to process
grep.kill('SIGHUP');

process 进程

此事件在进程退出时触发。这是检查模块状态的好地方(例如,单元测试)。由于在“exit”返回方法后主事件循环将不会继续执行,计时器可能不会生效。

process.on('exit', function () {
process.nextTick(function () {
console.log('This will not run');
});
console.log('About to exit.');
});

发生未处理的异常时触发此事件。如果事件具有侦听器函数,则不会执行默认行为(默认行为将打印错误堆栈并结束应用程序的执行)。例如,侦听“uncaughtException”事件:

process.on('uncaughtException', function (err) {
console.log('Caught exception: ' + err);
});
setTimeout(function () {
console.log('This will still run.');
}, 500);
// Intentionally cause an exception, but don't catch it.
nonexistentFunc();
console.log('This will not run.');

保存命令行参数的数组。第一个参数是“node”,第二个参数是Javascript文件的文件名,然后是其他命令行参数。

process.argv.forEach(function (val, index, array) {
console.log(index + ': ' + val);
});

Client

使用服务器地址作为参数来构造HTTP客户端。返回的句柄可用于发送一个或多个请求。根据连接的服务器,客户端可以使用管道处理机制来处理请求或为每个请求重建流。当前实现不使用管道处理机制来处理请求。

Example of connecting to google.com:
var http = require('http');
var google = http.createClient(80, 'www.google.com');
var request = google.request('GET', '/',
{'host': 'www.google.com'});
request.end();
request.on('response', function (response) {
console.log('STATUS: ' + response.statusCode);
console.log('HEADERS: ' + JSON.stringify(response.headers));
response.setEncoding('utf8');
response.on('data', function (chunk) {
console.log('BODY: ' + chunk);
});
});

节点不添加“主机”,但网站通常需要此属性。
发送“Connection:keep-alive”将告诉节点和服务器,该连接应该持续到下一个请求。发送“内容长度”标志将禁用默认邮件正文编码。
事件:“升级”

function (request, socket, head)
相关文章
|
10天前
|
算法 JavaScript 前端开发
垃圾回收机制对 JavaScript 性能的影响有哪些?
【10月更文挑战第29天】垃圾回收机制对JavaScript性能有着重要的影响。开发者需要了解不同垃圾回收算法的特点和性能开销,通过合理的代码优化和内存管理策略,来降低垃圾回收对性能的负面影响,提高JavaScript程序的整体性能。
|
28天前
|
自然语言处理 JavaScript 前端开发
深入理解JavaScript中的闭包:原理与实战
【10月更文挑战第12天】深入理解JavaScript中的闭包:原理与实战
|
1月前
|
缓存 JavaScript Unix
Node.js 多进程
10月更文挑战第8天
30 0
|
6天前
|
运维 监控 JavaScript
鸿蒙next版开发:分析JS Crash(进程崩溃)
在HarmonyOS 5.0中,JS Crash指未处理的JavaScript异常导致应用意外退出。本文详细介绍如何分析JS Crash,包括异常捕获、日志分析和典型案例,帮助开发者定位问题、修复错误,提升应用稳定性。通过DevEco Studio收集日志,结合HiChecker工具,有效解决JS Crash问题。
23 4
|
8天前
|
JavaScript 前端开发
利用事件循环提高 JavaScript 程序的性能
本文介绍了事件循环在JavaScript中的工作原理,以及如何通过合理利用事件循环来优化程序性能,包括异步操作、任务优先级和避免阻塞等技巧。
|
19天前
|
JavaScript 前端开发 开发者
探索JavaScript原型链:深入理解与实战应用
【10月更文挑战第21天】探索JavaScript原型链:深入理解与实战应用
26 1
|
1月前
|
SQL 前端开发 JavaScript
Nest.js 实战 (十五):前后端分离项目部署的最佳实践
这篇文章介绍了如何使用现代前端框架Vue3和后端Node.js框架Nest.js实现的前后端分离架构的应用,并将其部署到生产环境。文章涵盖了准备阶段,包括云服务器的设置、1Panel面板的安装、数据库的安装、域名的实名认证和备案、SSL证书的申请。在部署Node服务环节,包括了Node.js环境的创建、数据库的配置、用户名和密码的设置、网站信息的填写、静态网站的部署、反向代理的配置以及可能遇到的常见问题。最后,作者总结了部署经验,并希望对读者有所帮助。
119 11
|
27天前
|
JavaScript 前端开发 开发工具
【Azure Developer】使用JavaScript通过SDK进行monitor-query的client认证报错问题
AADSTS90002: Tenant 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx' not found. Check to make sure you have the correct tenant ID and are signing into the correct cloud. Check with your subscription administrator, this may happen if there are no active subscriptions for the tenant.
|
1月前
|
存储 JavaScript 前端开发
前端开发:Vue.js入门与实战
【10月更文挑战第9天】前端开发:Vue.js入门与实战
|
11天前
|
前端开发 JavaScript
JavaScript新纪元:ES6+特性深度解析与实战应用
【10月更文挑战第29天】本文深入解析ES6+的核心特性,包括箭头函数、模板字符串、解构赋值、Promise、模块化和类等,结合实战应用,展示如何利用这些新特性编写更加高效和优雅的代码。
26 0