Node JS简介– Node.js基础
我们将发布一系列帖子,主题为"如何使用Node JS,Express JS,Angular JS,Mongo DB,Redis和RESTful WebServices开发应用程序"。
我们将仅在Windows Environment上讨论所有这些文章。
在其他操作系统环境中,Node JS平台的安装和开发应用程序没有太大区别。
什么是Node JS?
Node JS是一个开源Java脚本平台,用于非常轻松地开发快速且可扩展的服务器端和网络应用程序。
Google的V8引擎是用于Chrome Web浏览器的开源JavaScript引擎。
V8 Engine完全用C++语言编写。
瑞安·达尔(Ryan Dahl)是"谷歌Gmail"的忠实拥护者。
他对Gmail的性能印象深刻,并开始创建新的平台。
Ryan Dahl在2009年基于Google的V8引擎开发了服务器端平台" Node JS"。
这意味着Node JS应用程序可以在V8 Engine上运行。
与用于编写客户端JavaScript的某些UI框架(例如Angular JS)不同,Node JS Platform用于编写服务器端JavaScript。
我们可以在Windows,Linux,Mac等大多数OS平台上运行Node JS应用程序。
Node JS平台的官方:https://nodejs.org/en/
什么不是Node JS?
Node JS是一个平台。
它不是框架或者Web框架。
它不是语言。
它是一个包含成千上万个模块的平台,用于开发各种应用程序。
我们可以安装基本的Node JS平台并非常轻松地更新您所有应用程序所需的模块。
节点JS"模块"也称为包。
现在开始,当我们提到Module时就是Node JS Package。
Node JS不适用于多线程应用程序。
它遵循具有事件循环体系结构的单线程。
如果您不知道什么是" Even Loop"架构,那么现在不要紧张。
我们将在以后的文章中讨论"什么是事件循环以及Node JS如何处理多个请求"。
我们将在后续文章中讨论如何设置Node JS Base Platform以及如何在需要的时间添加/安装所需的模块。
Node JS的功能
- 模块化Node JS平台的主要优点是模块化。
每个功能都被划分并实现为单独的模块或者包。
当我们安装Node JS Platform时,默认情况下它仅安装几个模块。
如果我们的应用程序需要其他模块,那么我们可以在应用程序开发阶段的任何时候轻松地安装和配置。
NodeJS有成千上万个模块。
一些模块是由Node JS社区开发的,而某些则是由第三方客户端开发的。
我们将在以后的文章中讨论并提供有关这些模块的一些示例。
在撰写本文时,Node JS Platform支持以下数量的软件包。
我们可以在其官方上查看此更新:https://www.npmjs.com/一些Node JS模块是用Java Script编写的,而某些是用C/C++语言编写的。
它的40%模块是用JS编写的,而60%模块是用C/C++编写的。
Express JSNode JS用于开发服务器端Java脚本。
它还包含用于Web应用程序框架的单独模块,即Express JS。非阻塞或者异步IONode JS支持非阻塞IO,即它使用异步IO模型与文件系统交互或者进行Socket通信或者网络通信。
异步IO模型意味着如果IO处理花费更多时间,则允许其他处理Java开发人员非常熟悉Blocking IO和Non-Blocking IO。
Java IO软件包遵循Blocking IO或者Synchronous IO Architecture,而Java NIO 2遵循Non-Blocking IO或者Asynchronous IO Architecture。事件驱动的异步平台
Node JS平台遵循均匀驱动循环体系结构来交互或者处理请求。
我们将在以后的文章中详细讨论" Even-Drive Loop"。MongoDB包装器API
Node JS平台包含一个单独的模块,用于将MongoDB No SQL数据库与应用程序集成。
它提供了一个MongoDB包装API,我们可以使用该API轻松编写JavaScript以与MongoDB数据库进行交互。
节点JS-mongodb模块使用Mongoose与MongoDB数据库进行交互。Redis客户端库APINode JS平台包含一个单独的模块,用于将Redis No SQL数据库与应用程序集成。
它提供了Redis包装器API。
我们可以使用此API轻松编写JavaScript以与Redis数据库进行交互。Jade模板引擎NodeNode JS平台支持许多模板引擎来编写HTML。
Node JS支持的默认模板引擎是" Jade"。
Jade是一个对空格敏感的模板引擎,可非常轻松地开发HTML应用程序。
我们可以编写一次模板页面,然后非常轻松地重用它们以减少开发时间。
我们将在另一篇文章中讨论如何安装和编写Jade模板。
Web服务器我们可以立即开发和使用HTTP Web Server。
我们需要使用http包来实现Web服务器。
我们将讨论一篇有关如何安装http软件包和开发Web服务器的文章。更好的套接字APINode JS平台提供了非常好的套接字模块API,可以非常轻松地开发实时,多用户聊天和多层游戏应用程序。
它支持像pipe()这样的Unix套接字编程。
Node JS的优点
一种语言和一种数据格式
我们需要使用一种和仅一种语言来编写整个应用程序,即Java脚本。
我们只需要使用Java脚本对从UI到控制器到业务层再到持久层(从前端到后端)的所有层进行编码。
从前端到后端的所有层都支持相同的数据格式,即JSON(Java Script对象符号)。
UI层Angular JS支持JSON格式,用Express JS编写的服务器端脚本支持JSON格式,后端MongoDB NO SQL支持相同的JSON格式。Open SourceNode JS是开源模块。
它提供了许多可在我们的应用程序中免费使用的模块。高度可扩展性为了提高应用程序性能,我们将扩展基础架构。
有两种方法可以扩展任何应用程序:水平扩展垂直缩放
垂直可伸缩性意味着向单个节点添加更多资源。
水平可伸缩性意味着向系统添加更多节点。
Node JS uses Horizontal Scaling instead of Vertical Scaling to our applications. It’s consistent with today’s Cloud Technology trend.- 更好的性能和较低的延迟I/O操作通常会阻塞我们的应用程序,因为它可能需要很长时间才能读取大文件,对数据库进行大型查询或者等待任何数据流完全传输。
-阻塞IO架构,并且仅使用JavaScript开发整个应用程序,我们可以获得更好的性能和低延迟。
如果使用MEAN Stack开发UI和数据密集型应用程序,则可以实现非常高的性能。
MEAN代表MongoDB,Express JS,Angular JS和Node JS。
缓存模块节点JS模块在首次加载到应用程序后即被缓存。
多次调用以加载模块可能不会导致模块代码多次执行。并发问题更少
Node JS不遵循多线程体系结构。
它遵循具有事件循环体系结构的单线程。
它可以处理任何数量的请求,而不会出现任何问题。
Node JS不需要处理对一组线程的请求池。
这就是为什么同时处理多个请求的开销较小的原因。
- 易于扩展且轻巧
我们只能安装所需的模块,并使用它们来开发应用程序。
每当我们需要添加新功能或者模块时,我们都可以轻松对其进行扩展。
通过遵循这种方法,我们还可以在我们的应用程序中实现非常轻巧的特性。
更快的开发和易于维护
由于Node JS平台已经提供了对许多模块的支持,因此我们可以立即使用它们并开发各种应用程序。
我们可以非常轻松地开发和维护Node JS应用程序。REST API
Node JS Platform支持非常轻松地开发RESTful Web服务API。许多开发框架和工具
我们可以获得许多开发工具,例如IDE和UI框架,可以非常轻松地开发Node JS应用程序。积极发展社区
Node JS开发社区非常积极地向现有模块添加新模块或者程序包,以支持各种应用程序开发。单元测试
在Node JS应用程序中,我们需要用Java Script编写整个代码。
今天,我们拥有许多Java脚本单元测试框架和工具,例如Jasmin Framework。流数据
我们可以使用Node JS轻松开发基于流的数据应用程序。创建服务器
Node JS平台具有一些内置的API,可以非常轻松或者快速地开发或者创建HTTP Server,DNS Server,TCP Server等。它可以在单个进程上以最少的开销(CPU /内存)处理数千个并发连接
简易的模块加载过程
将所需的Node JS模块加载到Node JS应用程序中非常容易。
我们只需要在我们的应用程序中使用require()语句。
它类似于Java编程语言中的" import"语句。
我们将在以后的文章中详细讨论有关require()的示例。
Node JS的局限性
它不支持多线程编程。
它确实支持计算密集型任务。
Node JS难以处理大量计算密集型任务,因为每当它执行长时间运行的任务时,它将遵循所有带有事件循环的单线程体系结构,将所有其余传入请求排队。不要将Node JS用于阻止/同步和占用大量CPU的任务。
API不稳定-Node JS仍处于Beta阶段,并且其大多数模块处于不稳定状态。
还没有为生产或者实时系统做好准备。
Node JS应用程序
我们可以使用Node JS Platform开发以下类型的应用程序。
- 网络应用
- 异步事件
- 智能网络代理
- 代理服务器
- 多人游戏应用
- 数据密集型实时应用
- 网络应用
- 高清(HD)语音和视频通信
- 文件上传工具
- 流程监控工具
- 多对多即时聊天应用程序
- 多对多即时处理应用程序
- HTTP Web服务器
- 实时物流系统
- 流媒体服务器
- 高并发应用
- 通讯中心
- 协调员
- DNS服务器
- 静态文件服务器
- TCP服务器
- 股票交易仪表板