Node.js 是一种将 JS 放在服务器端实现的平台,而为何要把js放到服务器端实现,JS 最初设计是在浏览器端解释执行,后来为何搞Node.js 把他放在服务器端执行呢?程序员
关于这个问题,近日有网友解释道:后端
Node.js 的做者 Ryan Dahl 是一名资深的 C/C++ 程序员,在创造出 Node 以前,他的主要工做都是围绕高性能 Web 服务器进行的。经历过一些尝试和失败以后,他找到了设计高性能,Web 服务器的几个要点:事件驱动、非阻塞I/O。浏览器
Ryan Dahl 最初的目标是写一个基于事件驱动、非阻塞 I/O的 Web 服务器,以达到更高的性能,提供 Apache 等服务器以外的选择。他提到,大多数人不设计一种更简单和更有效率的程序的主要缘由是他们用到了阻塞 I/O 的库。写做 Node 的时候,Ryan Dahl 曾经评估过 C、Lua、Haskell、Ruby 等语言做为备选实现,结论为:服务器
C 的开发门槛高,能够预见不会有太多的开发者能将它用于平常的业务开发,因此舍弃它;性能
Ryan Dahl 以为本身还不足够玩转Haskell,因此舍弃它;设计
Lua 自身已经含有不少阻塞 I/O 库,为其构建非阻塞 I/O 库也不能改变人们继续使用阻塞 I/O 库的习惯,因此也舍弃它;事件
而 Ruby 的虚拟机因为性能很差而落选。ip
相比之下,JavaScript 比 C 的开发门槛要低,比Lua的历史包袱要少。尽管服务器端 JavaScript 存在已经不少年了,可是后端部分一直没有市场,能够说历史包袱为零,为其导入非阻塞 I/O 库没有额外阻力。开发
另外,JavaScript 在浏览器中有普遍的事件驱动方面的应用,暗合 Ryan Dahl 喜爱基于事件驱动的需求。当时,第二次浏览器大战也渐渐分出高下,Chrome 浏览器的 JavaScript 引擎 V8 摘得性能第一的桂冠,并且其基于新 BSD 许可证发布,天然受到 Ryan Dahl 的欢迎。考虑到高性能、符合事件驱动、没有历史包袱这3个主要缘由,JavaScript 成为了 Node 的实现语言。虚拟机