Node.js第一个常见用途:

用于安装一些npm模块和运行(Node)各种构建工具。

从将JavaScript文件和依赖分析打包并生成静态资源、运行测试用例或自动编译和代码检查等任务。

如果想使用JavaScript框架(如React或Angular)开发应用,需要具备Node和npm的基础知识。不是因为需要一个Node环境来运行这些框架,是因为这些框架(以及许多相关的包)都是通过npm获得,并依赖Node来创建一个便捷的开发环境。

在服务端运行

Node最大的用途就是在服务端上执行JavaScript。早在1994年Netscape就首次尝试了这个概念。然而,Node.js是第一个获得真正吸引力的实现,与传统语言相比,它提供了一些独特的优点。Node现在在许多知名公司的技术堆栈中扮演着关键角色。让我们看看这些好处是什么

Node.js执行模型

用非常简单的术语来说,当您连接到传统服务器(如Apache)时,它将生成一个新的线程来处理请求。

在PHP或Ruby等语言中,任何I/O操作(如,与数据库连接)都会阻塞代码的执行,直到操作完成。也就是说,服务器必须等待数据库查找完成后才能继续处理结果。如果在此期间出现新的请求,服务器将生成新的线程来处理它们。这可能是低效的,因为大量的线程会导致系统变慢——在更糟糕的情况下,还会导致站点宕机。支持更多连接的最常见方法是添加更多服务器。

Node.js是单线程的。它也是事件驱动的,这意味着节点中发生的所有事情都是对事件的响应。例如,当一个新的请求进来(一种事件),服务器将开始处理它。如果它遇到阻塞I/O操作,它将在继续处理下一个事件之前注册一个回调,而不是等待这个操作完成。当I/O操作完成时(另一种事件),服务器将执行回调并继续处理原始请求。实际上,Node使用libuv库实现这种异步(即非阻塞)行为。

Node的执行模型对服务器的开销非常小,因此它能够处理大量的并发连接。扩展Node应用的方法是克隆Node应用,并让克隆的实例共享工作负载。Node.js甚至有一个内置模块来帮助您在单个服务器上实现克隆策略。

下图描述了Node的执行模型:

有什么缺点吗?


Node在单个线程中运行这一事实确实带来了一些限制。例如,应该避免阻塞I/O调用,并做好容错处理,以免导致整个进程崩溃。一些开发人员也不喜欢JavaScript强加的基于回调的编程风格(甚至有一个站点专门讨论编写异步JavaScript的可怕之处)。但是随着原生Promise的出现,紧接着是async await(默认情况下在Node7.6中启用),这正在迅速成为过去。

什么样的应用适合Node.js


Node特别适合于构建实时交互或协作的应用程序——例如,聊天室等应用,在这些应用程序中,您可以实时查看其他人正在编辑的文档。它也非常适合构建api,在这些api中,您需要处理大量I/O驱动的请求(例如,需要对数据库进行操作),或者对于涉及数据流的站点,因为Node可以在上传文件时处理文件。

你不能使用Node来构建一个简单的CRUD应用。但是, 如果你遵循这条路,你很快就会发现Node是非常基本的和你建立的方式和结构的应用很大程度上取决于你。当然,您可以使用各种框架来减少重复代码,Express已经将自己确立为首选框架。然而,即使是像Express这样的解决方案也是最小化的,这意味着如果您想做一些稍微不同寻常的事情,您将需要从npm中引入其他模块。

如何构建和构造Node.js MVC应用程序。

Node.js的优点是什么?


除了速度和可伸缩性,在web服务器上(以及浏览器中)使用JavaScript的一个经常被吹捧的优点是,您的大脑不再需要切换模式。作为一名开发人员,您可以使用相同的语言完成所有工作,这将使您的工作效率更高。

服务端和客户端之间共享一套代码,同构应用

Node的另一个优点是它使用JSON。JSON可能是Web上最重要的数据交换格式,也是与对象数据库(如MongoDB)交互的通用语言。JSON非常适合JavaScript程序使用,这意味着当您使用Node时,数据可以在层之间流畅地流动,而不需要重新格式化。您可以拥有从浏览器到服务器到数据库的一种语法。

最后,JavaScript是无处不在的:我们大多数人都熟悉或曾经使用过JavaScript。这意味着转换到Node开发可能比转换到其他服务器端语言更容易。

JavaScript可能是世界上最容易被误解的语言

Node的其他用途


不止在服务器端,Node.js还在其他的领域发挥着重要作用!

例如,可以把它作为脚本语言在您的PC上自动执行重复或容易出错的任务。它还可以用来编写您自己的命令行工具。例如 Yeoman-Style generator来生成新项目。

Node.js还可以用来构建跨平台的桌面应用程序,甚至可以创建自己的机器人。真不知道还有什么Node不能做的?

最后


JavaScript无处不在,Node是一个庞大而广泛的主题。作为一个合格的w'eb开发者这已经是必备的技能了。