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)
相关文章
|
1月前
|
缓存 负载均衡 安全
在Python中,如何使用多线程或多进程来提高程序的性能?
【2月更文挑战第17天】【2月更文挑战第50篇】在Python中,如何使用多线程或多进程来提高程序的性能?
|
3月前
|
数据采集 并行计算 JavaScript
实战指南:在 Node.js 中利用多线程提升性能
在 Node.js 的世界中,多线程技术一直是一个受到广泛关注的领域。最初,Node.js 设计为单线程模式。随着技术发展,Node.js 引入了多线程支持,进而利用多核处理器的强大性能,提升了应用性能。接下来的内容将深入探讨 Node.js 如何实现多线程,以及在何种场合应该采用这种技术。
|
4月前
|
负载均衡 JavaScript 算法
Node.js 多进程的概念、原理、优势以及如何使用多进程来提高应用程序的性能和可伸缩性
Node.js 多进程的概念、原理、优势以及如何使用多进程来提高应用程序的性能和可伸缩性
43 1
|
1天前
|
缓存 JavaScript 前端开发
Vue.js 路由时用于提高应用程序性能
Vue.js 路由时用于提高应用程序性能
|
6天前
|
算法
Swiper库和Glide.js库的性能有何区别
Swiper和Glide.js是两个流行的响应式轮播图库。Swiper功能强大且灵活,支持多方向滑动,拥有丰富的配置和切换效果,适合复杂需求,其高性能得益于优化的算法和惰性加载。Glide.js则轻量级、快速,专注于基础功能,适合简洁需求。两者各有侧重,选择应基于项目具体需求和性能考虑。
|
1月前
|
JavaScript 前端开发
在JavaScript中,如何优化原型链的性能?
在JavaScript中,如何优化原型链的性能?
16 2
|
2月前
|
并行计算 安全 Java
Python多进程与多线程的性能对比及优化建议
Python多进程与多线程的性能对比及优化建议
|
2月前
|
Ubuntu Linux Shell
【Linux操作系统】探秘Linux奥秘:进程与任务管理的解密与实战
【Linux操作系统】探秘Linux奥秘:进程与任务管理的解密与实战
37 0
|
2月前
|
算法 Ubuntu Linux
【操作系统】探究进程奥秘:显示进程列表的解密与实战
【操作系统】探究进程奥秘:显示进程列表的解密与实战
36 0
|
3月前
|
缓存 JavaScript 前端开发
原生js浪费性能吗?
原生js浪费性能吗?
17 0