它在处理大量文件I / O方面特别强大,我希望它也能够处理大量网络通信。对于套接字驱动的应用程序,它似乎特别受欢迎。要记住的重要一点是,如果现有库(有很多)无法满足您的需求,那么您可能需要研究一些可以绑定到JS命令的C。您还可以生成其他Node进程,但我怀疑这样做很多会增加负担(我认为-可能是错误的-每个实例都有一个V8实例)。
JS是单线程和阻塞的,这意味着在函数调用完成之前,其他任何事情都无法执行。这是JS的理想功能,从根本上解决了所有线程和排队问题。JS不会阻止C / C ++东西在幕后以更多的多线程方式运行,因此JS的作用实际上是更多的体系结构/消息传递者。如果您要进行图像处理,则不要使用同步JavaScript命令来处理它,因为应用或服务器上的所有其他内容都将被阻止,直到完成为止。这个想法是您要求通过绑定的C / C ++功能来处理图像,然后在完成图像处理后响应“完成”事件。
这要求任何Node.js应用程序中的JS都具有大量事件和回调驱动,否则它的性能可能非常差。因此,您不会在Node中看到很多方法调用,这些方法调用不会传递给函数供以后使用。在Node中很快变得非常清楚的一件事是,如果您没有找到处理回调金字塔的方法,那么您将陷入一个丑陋的世界。例如
//event CBs are more DOM-style than Node style and this isn't built-in Node file I/O
//keeping it simple and quick since I'll just get Node stuff wrong from memory
file.get('someFile.txt', function(e){
e.fileObj.find('some snippet', function(e){
someFinalCallBackHandler( e.snippetLocations );
} );
} );
幸运的是,这里有很多工具和示例可以更好地处理此问题。大多数趋向于围绕promise机制,并简单地将一系列旨在链接到彼此的回调状态的函数链接到一个数组中,该数组可以在后台为您执行丑陋的金字塔工作。
就我个人而言,我非常热爱我们可以使JS处于较高水平,而C / C ++则更接近于chrome。这是终极的组合,它激发了我开始学习C的能力。在完成某些研究之前,请不要让缺少库的潜能吓到您。节点库的生产速度非常快,并且日趋成熟。如果您不做任何非常不寻常的赔率,那么有人可以解决。
与Rails的最大区别在于,JS永远不可能像现在一样出现在Rails上。我们倾向于编写代码以使其能够拥有,但是您希望它非常迅速,因此有很多因素可以使您垂涎三尺,并且直到最近几年,JS中的架构一直都是DIY。我称之为自由,但我意识到这对许多开发人员而言并不理想。
另外,因为您尝试在Mac以外的其他设备上进行安装,所以Node.js中永远不会出现“宝石”问题。客户端Web开发人员轻视依赖关系问题,而这正是许多Node核心的来源。如果在每个流行的平台上都无法在5分钟或更短的时间内立即解决问题,我们通常将其弄碎并扔掉。我尚未遇到一个流行的模块,该模块需要我做一些特殊的事情才能使其正常工作。包装系统,非常好。
但是要更明确/简洁地回答您的核心问题:后台流程是否很好?
是的,Node基本上是IS后台进程,可以通过事件和回调来驱动应用程序。