为什么你应该选择 Node.js 来开发服务器端应用程序
Node.js 技术将所有 Web 开发人员熟悉的 JavaScript 从一种客户端脚本语言转变为一种具有大量应用场景的通用语言。
与其他服务器端脚本技术相比,Node 有哪些优势?
Node.js 的核心工作原理是异步。除了非阻塞 I/O 之外,这使得基于 Node.js 的服务器端应用程序在单位时间内可以处理比大多数其他服务器端开发技术开发的类似应用程序多得多的客户端请求。
这对你的企业意味着什么?
- 你可以用相对较低的服务器基础设施成本启动自己的项目。
- 通过合理的架构,您可以无需投入大量资金即可扩展业务。
这对开发者意味着什么?
- 如果你不了解异步代码,也没有相关经验,一开始会非常困难。你很难理解,一些“上游”编写的指令可能会比后续指令晚很多执行,甚至可能根本不会执行。你需要深入学习回调、Promise、Promise 的 async/await 封装、同步和异步生成器以及迭代器等概念。但这种结构化的思维方式能让你以不同的视角看待程序执行过程,理解“普通”的同步程序在等待期间浪费了多少时间,并学习如何节省这些时间。
- 对异步开发方法的深入理解可以大大提高专业人才在劳动力市场上的价值,并因此使您有资格获得更高的薪水。
Node.js 可以让你快速开发 MVP(最小可行产品)。Node.js 已经开发了大量功能丰富的软件包。你无需花费时间开发基础功能,只需专注于业务逻辑即可。
这对你的企业意味着什么?
- 新产品将更快上市(上市时间将缩短)。
- 由于创建产品第一个版本所需的开发人员工时较少,因此开发过程中花费的资金也会减少。
- 在初步市场调研阶段形成的假设能够更快地得到验证,产品调整也能更快地完成,资金最终也能更快地周转。这对项目投资者来说是一项非常重要的优势。
这对开发者意味着什么?
- 你不必在每个项目中都重新发明轮子,那样必然会导致很多错误,也会让工作变得枯燥乏味,但你可以密切关注对项目重要的任务。
- 在选择方法、构建架构和最终确定不符合架构师和/或客户要求的标准功能方面,拥有更大的自由度。
- Node.js 是基于 JavaScript 语言构建的。因此,这大大增加了开发团队中培养全栈专家的可能性:既精通后端又精通前端的开发人员,或者既精通前端又精通后端的开发人员。
Node.js 与 JavaScript 非常接近,语法和架构方法完全相同,只有“绑定”(浏览器和服务器)不同。
这对你的企业意味着什么?
- 开发团队将包括对问题有更全面认识的专家,这意味着管理层的负担将会减轻。
- 开发过程将更加高效,因为对于一个全栈开发人员来说,与自己沟通总是比与其他人沟通更容易、更快捷。这降低了专家之间的沟通成本。
- 开发过程中出现的错误会更少,因为浮动错误通常发生在不同开发技术和不同数据类型的交叉领域。
这对开发者意味着什么?
- 如果你以前与前端密切合作过,那么你对资源用户部分的数据处理过程就有了很好的了解,因此,与前端用户的沟通也会更加简单。
- 优秀的全栈开发专家在市场上往往比优秀的后端或前端开发人员更受青睐。
- 如果项目开发有足够的时间,您可以独立创建前端和后端,从而避免大量的“冲突”,解决这些冲突通常需要花费大量时间。
当然,像任何其他技术一样,Node 也有其缺点。
Node 的弱点是什么?
- Node 在处理大量轻量级查询(例如不需要长时间数据处理、复杂计算等的查询)时速度非常快,但如果请求需要大量服务器资源,其性能会显著下降。
- 该语言及其执行机器的开发非常活跃,有时会出现各个软件包彼此不兼容或与当前平台版本不兼容的情况,这可能导致在更新“引擎”或单独的软件包时项目完全失败。
通常,Node 的反对者会利用这些缺点来解释他们为何不愿在生产环境中使用它。此外,为了佐证第一个缺点,他们经常声称 Node 是单线程的,因此无法用它编写复杂的应用程序。在当前的技术发展阶段,这种说法完全错误。首先,早已存在一种运行应用程序多个实例并使用 Nginx Web 服务器作为负载均衡器的方法。其次,在现代版本的 Node 中,已经内置了创建单线程进程集群的功能,以及用于负载均衡、进程自动重启、内存使用控制等的专用工具。
Node 的第二个缺点很容易弥补。首先,永远不要使用“latest”格式指定软件包版本,而应该指定系统保证兼容的确切版本。其次,为了避免无法访问公共注册表中的确切软件包版本,请在本地注册表中创建它们的副本。第三,在开发环境中测试该软件包之前,不要在生产环境中更新平台或软件包版本(这一点显而易见,但经常被忽略)。
在资源密集型操作中,无法对 Node 进行“超频”。但有一个解决方案:将会产生高硬件负载的操作转移到非 Node 编写的独立系统组件上,这些组件通常位于独立的物理机或虚拟机上。实现此解决方案有多种选择:微服务架构、连接用其他编程语言编写的模块等等。
作为能够实现高性能功能的技术,Rust、Go、C++ 的使用非常方便。
哪些情况下使用Node比较方便?
这项技术非常适合现代 Web 开发领域的大多数项目。几乎所有项目的创始人在创业之初都梦想着他们的产品能被尽可能多的人使用。项目示例:
- 在线商店;
- 视频和音频托管服务;
- 即时通讯软件;
- 社交网络;
- 任何B2C产品。
对于所有这些方向,Node 都允许你实现(如上所述)快速入门,然后快速、相对便宜地进行水平扩展。
Node.js 项目
在撰写本文之前的一年里,我们运用技术从零开始开发了以下资源:
- 自由职业者交流;
- 备件市场;
- 实时拍卖(移动应用和网页版 API);
- 用于创建社交网络媒体素材的交互式系统;
- 用于组织电子邮件新闻通讯的系统;
- 零售企业检查员助手(移动应用程序 API);
- 患者助手(移动应用程序 API)。


