当前位置: 首页 > 科技观察

JavaScript是如何打败其他语言,成为Node的实现语言的?

时间:2023-03-13 14:10:27 科技观察

Node.js是一个在服务端实现JS的平台,但是为什么要把js放在服务端呢?JS最初是为了在浏览器端解释执行而设计的。后来为什么Node.js要把他放在服务器端呢?在服务器端执行呢?对于这个问题,最近有网友解释说:RyanDahl,Node.js的作者,是一位资深的C/C++程序员。在创建Node之前,他的主要工作是围绕高性能Web服务器。经过一些尝试和失败后,他发现了设计高性能Web服务器的几个关键点:事件驱动、非阻塞I/O。RyanDahl最初的目标是编写一个事件驱动的、基于非阻塞I/O的Web服务器,以实现更高的性能,并提供Apache等服务器的替代方案。他提到,大多数人不设计更简单、更高效的程序的主要原因是他们使用了阻塞I/O的库。在编写Node时,RyanDahl曾评估过C、Lua、Haskell、Ruby等语言作为替代实现,得出的结论是:C的开发门槛很高,可以预见的是,没有多少开发者能够将它用于日常使用。业务发展,所以我放弃了;RyanDahl觉得自己玩Haskell不够好,所以放弃了;Lua本身已经包含了很多阻塞I/O库,为其构建一个非阻塞I/O库并不能改变人们继续使用阻塞I/O/O库的习惯,所以也被废弃了;而Ruby的虚拟机因为性能不佳被拒绝了。相比之下,JavaScript的开发门槛比C低,历史包袱比Lua少。尽管服务器端JavaScript已经存在多年,但后端部分一直没有市场。可以说历史包袱为零,没有为它导入非阻塞I/O库的额外阻力。此外,JavaScript在浏览器中有着广泛的事件驱动应用,这与RyanDahl偏爱事件驱动的需求不谋而合。当时,第二次浏览器大战逐渐分化,Chrome浏览器的JavaScript引擎V8夺得了最佳性能的桂冠,并且基于新的BSD许可证发布,自然受到了RyanDahl的欢迎。综合考虑高性能、事件驱动合规、无历史包袱三大原因,JavaScript成为了Node.js的实现语言。