我感觉到你的痛苦!
和许多人一样,我发现很难理解Node.js的本质,因为大多数人只写/谈论他们认为有用的Node部分-他们发现有趣的部分通常是Node的次要利益,而不是其主要利益。目的。我必须说,我认为让人们说Node只是一个JavaScript运行时很疯狂。Node对JavaScript的使用及其对V8运行时的选择,只是达到最终目的的最佳工具,它是Node开发人员想要解决的问题的最佳工具。
Node的主要目的是提高Web应用程序中用户事件的管理效率。所以Node是压倒性的用于网络应用程序的后端。事件管理要求某些东西正在服务器上监听这些用户事件。因此,必须设置http服务器以将每个事件路由到其相应的处理程序脚本。Node提供了一个框架,用于快速设置服务器以在专用端口上侦听用户请求。Node使用JavaScript进行事件处理,因为JavaScript具有回调功能:这允许暂停一个任务,直到返回从属任务的结果。很少有其他语言具有此功能,并且那些语言可能没有像Google V8运行时那样高效的解释器。大多数Web开发人员都知道JavaScript,因此Node不需要额外的语言学习。此外,具有回调功能允许将所有用户任务放在单个线程上无需将显式阻止应用于要求访问数据库或文件系统的任务。这就是在大量并发使用下导致Node优越的执行效率的原因,这是其开发的主要目的。
为了帮助Node用户快速写出后端代码,Node的开发人员还组织了一个内置的JS库来执行例行任务(例如与HTTP请求,字符串(反)编码,流等有关的事项)和NPM(Node Package Manager)存储库:这是一组开源的,用户维护的脚本包,用于各种标准和自定义功能。所有Node项目均允许通过已建立的npm install 命令将NPM软件包导入到项目中。
通过Node处理的用户请求将是Web应用所需的东西,例如身份验证,数据库查询,内容管理(Strapi CMS)等。所有这些都将发送到Node端口。(在这种情况下,从数据库获取数据的分析需要大量的CPU时间,这种类型的过程最好放在单独的线程上,这样就不会减慢简单的用户请求。)其他类型的用户请求,例如加载另一个网页,下载CSS / JS /图像文件等内容,将继续由浏览器发送到Web服务器程序(Apache,NGinx等)将用于处理它们的服务器计算机上的默认端口。
因此,在实践中,Node原则上是用于快速创建服务器和处理事件的框架,但仅替代Web服务器程序的某些功能。
Node的其他非后端用途只是利用其一项或多项功能,例如V8引擎。例如,前端构建工具Grunt和Gulp使用Node.js处理可被编码为将SASS转换为CSS,最小化CSS / JS文件,优化图像大小/加载等的构建脚本。但是这种工作确实是只是Node的副产品用途,而不是其主要用途,Node的主要用途是为Web应用程序创建高效的后端流程。