理解节点js的性能

时间:2015-11-20 15:56:02

标签: javascript node.js

我最近发现了Node js,我在各种文章中读到Node js很快并且可以处理比Java服务器更多的请求,尽管Node js使用单个线程。

我知道Node基于事件循环,每次调用远程api或数据库都是通过异步调用完成的,因此主线程永远不会被阻塞,服务器可以继续处理其他客户端请求。

如果我理解的话,可能需要花费时间的每部分代码都应该使用异步调用进行处理,否则服务器将被阻止,并且它无法处理其他请求?

var server = http.createServer(function (request, response) {
   //CALL A METHOD WHICH CAN TAKE LONG TIME TO EXECUTE
   slowSyncMethod();
   //THE SERVER WILL STILL BE ABLE TO HANDLER OTHERS REQUESTS ??
   response.writeHead(200, {"Content-Type":"text/plain"});
   response.end("");
});

所以如果我的理解是正确的,上面的代码是坏的,因为对慢速方法的同步调用将阻塞Node js主线程?如果所有可能花费时间的代码都以异步方式执行,那么节点j是否快速?

1 个答案:

答案 0 :(得分:1)

NodeJs与您的硬件(vm)和运行它的v8一样快。话虽如此,任何类型的媒体(音乐,图像,视频等)文件处理等任何繁重的任务都将最终锁定您的应用程序。因此,对大型集合进行计算,这就是为什么通过事件和延迟调用来利用异步模型的原因。据说没有什么可以阻止你产生子进程来降低重负荷并异步地恢复结果。但是,如果您发现自己需要为许多任务执行此操作,那么您可能应该重新审视您的架构。 我希望这有助于