Node.js于2009年首次发布,现在是由Node.js Foundation开发的开源社区项目。用于服务器端和网络应用程序的开源,跨平台JavaScript运行时环境。Node.js建立在Google V8 JavaScript引擎之上,这意味着Node.js应用程序是用JavaScript编写的,并且使用与前端JavaScript应用程序类似的语法,包括对象,函数和方法。

为什么使用Node,Node与传统服务端技术栈差之间的区别?

Node.js的主要思想:面对跨分布式设备运行的数据密集型实时应用程序,使用非阻塞,事件驱动的I / O保持轻量级且高效。

为什么使用Node,Node与传统服务端技术栈差之间的区别?

Node.js带有一个内置库,该库允许应用程序充当Web服务器。由于其事件驱动的体系结构和可优化应用程序吞吐量的非阻塞I / O API,Node.js在实时通信方面表现出色。以下是Node.js的优点:

轻巧且快速。易于配置且高度可定制。带有npm 软件包管理器,其中包含140.000+个免费提供的软件包,并且可以很好地处理依赖项。消除了前端和后端开发人员之间存在的孤岛,使开发过程更加有效。后端和前端团队可以合并为一个单元。如果使用了以JSON(例如MongoDB或Cloudant)存储对象的NoSQL DB,则它允许使用“从上到下”的JavaScript构建应用程序,甚至可以降至数据库级别。这使开发甚至招聘变得更加容易。能够以高吞吐量处理大量同时连接。因此,在构建快速且可扩展的网络应用程序方面表现出色。允许代码在应用程序的客户端和服务器端之间重用。尽管最初设计Node.js时没有线程,但仍然可以利用多个内核并使用ChildProcess API生成子进程。Node真正的亮点在于构建快速,可扩展的网络应用程序,因为它能够以高吞吐量处理大量并发连接,这相当于高可扩展性。

Node.js有一个缺点–它不是为繁重的计算而设计的,因为任何CPU密集型操作都会废除所有吞吐量,并且在线程忙于处理数字时会阻止任何传入的请求。

Node.js和传统服务器之间的请求处理比较

Java作为后端编程语言的优势非常多。

平台独立性

Java以其“一次编写,随处运行”的方法而闻名并广受喜爱,这意味着用Java编写的代码可以在任何平台上运行,而不管其最初创建于何处。这样的平台独立性归因于所谓的Java虚拟机-Java代码执行的环境。

在JVM之前,所有软件都是为特定的操作系统编写的,而JVM通过使该软件可以在安装JVM的任何硬件或操作系统上运行而成为一项突破。JVM使Java源代码可在任何平台上读取,而无需任何特殊的编译器。在这方面,Java与其他需要编译器的语言不同。

反过来,Node.js具有与操作系统绑定的模块。当你需要软件在另一个平台上运行时,你将不得不重建模块,以使其与新的OS兼容。

集成开发环境(IDE)Node.js和Java都有其IDE,但是Java更好。Java开发人员的首选工具是Eclipse,IntelliJ IDEA和NetBeans,它们带有集成的调试器,服务器和反编译器。

每个Java IDE是一个完整的生态系统,支持后端代码创建的所有阶段。在每个IDE中,你可以轻松地编写代码,对其进行编辑和调试,构建软件然后进行测试。

Node.js开发人员通常仅使用纯文本编辑器和命令行来编写其代码。有些人更喜欢支持Node.js和JavaScript的Visual Studio Code。当然,市场上也有性能良好的Node.js IDE,例如,具有智能编码辅助和错误检查功能的WebStorm,Eclipse Che和具有完整配置的调试器模块的特殊Node.js堆栈。 但是,大多数开发人员都认为,与Node.js开发中使用的Java IDE相比,Java IDE更加精简。

库在过去的二十多年中,Java积累了大量包含可重用代码组件的库。库是节省大量Java社区知识的省时工具。

大多数Java库都是开源的,并由经验丰富的Java开发人员支持和更新。Java库的集合涵盖了所有编程方面–有通用库(例如Apache Commons),XML解析库(例如JAXB),单元测试库(例如JUnit)以及数千种库。

Node.js具有可被视为JavaScript库的模块。一些模块是内置的,例如用于解析URL字符串的 url 模块, 提供加密功能的crypto 模块, 支持HTTP协议功能的http 模块, 允许与文件系统交互的fs 模块, 用于处理文件的path 模块。和目录路径,而其他路径则可用作第三方组件。模块化结构是Node.js的强项之一,它使用户可以节省时间并易于修改和扩展。尽管如此,Java库的质量仍然被认为更高。

多线程处理

Java使用多线程Web服务器,该服务器在单独的线程中处理每个请求。多线程允许在不排队事件的情况下同时执行多个任务。

多线程处理使Java成为CPU密集型应用程序(例如视频流,图像编辑等)的绝佳工具。使用Java集成了多线程,而其他语言则需要针对每个操作系统的附加过程来启用多线程请求处理。

Node.js是单线程的,其中所有请求都在单个线程中处理。这些事件被放置在队列中,一个接一个地处理。单线程方法在某种程度上减慢了Node.js应用程序的性能,并使之成为处理CPU繁重的大型产品的次佳选择。

同时,我们应该注意,Node.js正在实现 多线程模式。但是,称为“工作线程”的解决方案实际上并不会创建真正的多线程进程。仍然有带有新进程的单线程可以共享内存和交换消息。

辅助线程是CPU密集型任务的解决方案。这可能是Node.js缺乏的唯一主要领域。当前,还没有一个稳定的版本。因此,我们不能说这项倡议是否成功。无论如何,都值得遵循。