本节书摘来自异步社区《Node学习指南》一书中的第1章,第1.4节,作者【美】Shelley Powers,更多章节内容可以访问云栖社区“异步社区”公众号查看
1.4 Node的优势
Node学习指南
现在,你至少已经安装了一个(或多个)可用的Node版本。
你也有机会去创建多个Node应用程序,并且通过测试发现同步与异步编码之间的差异(以及不小心忘记了var关键字的情况)。
Node使用的函数调用并不都是异步的。一些对象针对同一功能可能会同时提供同步与异步版本的实现。尽管如此,如果你能尽可能多的进行异步编码,将会使Node工作得更好。
Node的事件循环和回调函数给我们带来了两大好处。
首先,应用程序可以很容易地扩展,因为执行一个单线程并不会有非常大的资源开销。如果我们用PHP创建一个类似于示例1-3的Node应用时,用户会看到相同的页面(但你的系统肯定会注意到其中的差别)。如果你在Apache中运行该PHP应用程序并默认使用prefork MPM,那么在每次应用程序接收到请求时,请求将被放在一个单独的子进程中来处理。倘若你能够拥有一个强大且高效的负载均衡系统,同时并行运行(最多)几百个子进程或许是有可能的。不过当访问量超过这个数字时,就意味着客户端需要等待响应了。
Node的第二个优势在于无需诉求于多线程开发,却达到了节约又能高效使用资源的目的。换句话说,你不必创建一个线程安全的应用程序。倘若你曾经开发过要求线程安全的应用程序,或许此时你会感到非常欣喜。
无论如何,正如前面示例应用程序所展示的那样,你不是在开发浏览器中运行的JavaScript应用程序。当你开发异步应用时,不能假设一个异步函数在另一个函数被调用前就执行完成,因为这是无法保证的(除非你在第一个回调函数中调用另一个)。此外,全局变量在Node中是非常危险的,特别是在你忘记了var关键字时。
虽然这些问题存在,但并不妨碍我们在工作使用Node,特别是考虑到它的低资源需求优势,以及不必担心线程安全问题。
提示:
或许喜欢Node的原因也可以是毫无顾虑地写JavaScript代码而无需担心IE6了。