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月前
|
算法 JavaScript 前端开发
垃圾回收机制对 JavaScript 性能的影响有哪些?
【10月更文挑战第29天】垃圾回收机制对JavaScript性能有着重要的影响。开发者需要了解不同垃圾回收算法的特点和性能开销,通过合理的代码优化和内存管理策略,来降低垃圾回收对性能的负面影响,提高JavaScript程序的整体性能。
|
24天前
|
监控 JavaScript 算法
如何使用内存监控工具来定位和解决Node.js应用中的性能问题?
总之,利用内存监控工具结合代码分析和业务理解,能够逐步定位和解决 Node.js 应用中的性能问题,提高应用的运行效率和稳定性。需要耐心和细致地进行排查和优化,不断提升应用的性能表现。
174 77
|
26天前
|
存储 缓存 JavaScript
如何优化Node.js应用的内存使用以提高性能?
通过以上多种方法的综合运用,可以有效地优化 Node.js 应用的内存使用,提高性能,提升用户体验。同时,不断关注内存管理的最新技术和最佳实践,持续改进应用的性能表现。
116 62
|
29天前
|
JavaScript 前端开发
如何使用时间切片来优化JavaScript动画的性能?
如何使用时间切片来优化JavaScript动画的性能?
|
15天前
Next.js 实战 (二):搭建 Layouts 基础排版布局
本文介绍了作者在Next.js v15.x版本发布后,对一个旧项目的重构过程。文章详细说明了项目开发规范配置、UI组件库选择(最终选择了Ant-Design)、以及使用Ant Design的Layout组件实现中后台布局的方法。文末展示了布局的初步效果,并提供了GitHub仓库链接供读者参考学习。
Next.js 实战 (二):搭建 Layouts 基础排版布局
|
22天前
|
存储 缓存 监控
如何使用内存监控工具来优化 Node.js 应用的性能
需要注意的是,不同的内存监控工具可能具有不同的功能和特点,在使用时需要根据具体工具的要求和操作指南进行正确使用和分析。
65 31
|
10天前
|
存储 网络架构
Next.js 实战 (四):i18n 国际化的最优方案实践
这篇文章介绍了Next.js国际化方案,作者对比了网上常见的方案并提出了自己的需求:不破坏应用程序的目录结构和路由。文章推荐使用next-intl库来实现国际化,并提供了详细的安装步骤和代码示例。作者实现了国际化切换时不改变路由,并把当前语言的key存储到浏览器cookie中,使得刷新浏览器后语言不会失效。最后,文章总结了这种国际化方案的优势,并提供Github仓库链接供读者参考。
|
18天前
|
JSON 缓存 负载均衡
Node.js 的性能
Node.js 的性能
43 12
|
10天前
Next.js 实战 (三):优雅的实现暗黑主题模式
这篇文章介绍了在Next.js中实现暗黑模式的具体步骤。首先,需要安装next-themes库。然后,在/components/ThemeProvider/index.tsx文件中新增ThemeProvider组件,并在/app/layout.tsx文件中注入该组件。如果想要加入过渡动画,可以修改代码实现主题切换时的动画效果。最后,需要在需要的位置引入ThemeModeButton组件,实现暗黑模式的切换。
|
26天前
|
设计模式 前端开发 JavaScript
JavaScript设计模式及其在实战中的应用,涵盖单例、工厂、观察者、装饰器和策略模式
本文深入探讨了JavaScript设计模式及其在实战中的应用,涵盖单例、工厂、观察者、装饰器和策略模式,结合电商网站案例,展示了设计模式如何提升代码的可维护性、扩展性和可读性,强调了其在前端开发中的重要性。
29 2
下一篇
DataWorks