Node JS简介– Node.js基础

时间:2020-02-23 14:41:08  来源:igfitidea点击:

我们将发布一系列帖子,主题为"如何使用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服务器
  • 股票交易仪表板