服务端开发语言种类繁多,为什么还会有 Nodejs?
最直接的一个原因:Node 为 JavaScript 提供非浏览器端的运行环境。在 Node 出现前,JavaScript 就十分普及了。使用 Node 可以统一前后端开发语言,从学习和商业角度,都减少了成本。
JavaScript 曾经是非常简单的语言,只能处理简单的逻辑,那时候业务逻辑都是放在服务端进行处理。随着 Web2.0 的发展,出现了 Gmail 等复杂的 Web App,前端需要处更复杂的逻辑和需求,促使了 JavaScript 语言的发展,运行效率也得到了优化。在这段发展过程中,JavaScript 成为需要在运行时编译的语言,并诞生了 Chrome V8 引擎,其高效率为 Node 能够处理后端复杂逻辑提供了基础。
在技术上,Nodejs 的特点是事件驱动和非阻塞式 IO。早期的 Java 和 PHP 不支持 epoll 模型,采用的是 BIO(Block IO)模型,使得在 Java 中,每次 http 请求等 IO 操作是阻塞式的。当遇到高并发场景时,由于每个 IO 操作都需要新的线程进行处理,而等待过程中,线程占用的 CPU 资源处于空转状态,造成了资源浪费。而 Nodejs 的非阻塞式 IO 可以有效避免这种问题。
发展历史
值得注意的是,Node.js 的创建者 Ryan Dahl 是“受到 Gmail 等应用的启发”,为了开发一个具有实时推送功能的网站。在 Node.js 中,他提供了一个用于处理非阻塞事件驱动的 I/O 工具。这也使得当时 Node.js 在基于 websockets 推送技术的实时 Web 应用中大放异彩。
在 Node 成长阶段中,成员开发出奠定了 Node.js 如今地位的重要工具 —— npm。npm 作为简单易用的包管理器,为维持 Node 生态起到不可替代的作用。
使用场景
Node.js 可以说是一种轻量的、可模块化的开发工具,就目前而言,它适合作为以下场景的开发工具:
- Web 后端服务
- Web API 服务
- CLI 工具开发
- 简易的 Native 应用开发