Node.js是什么?优势是什么?

Node.js是什么?优势是什么?

相关推荐:《nodejs 教程》

作为一名JS的粉忠实粉丝,虽然JS并没有JAVA的生态圈这么大,但是JavaScript从客户端脚本程序跻身服务器端,这让我们要重视一下它,JavaScript它在慢慢崛起,我们要换一种眼光去学习它。

Node.js是什么?

Node.js是什么?优势是什么?

Nodejs本质上是一个JavaScript的运行环境。

基于Google的V8引擎,实际上,是从Chrome上抠下的V8引擎并加以封装的一个执行环境。

我们去官网下载包,傻瓜式安装。

Node下载官网:https://nodejs.org/en/download/

在命令行输入node 就能运行javaScript脚本。

Node.js是什么?优势是什么?

Node.js的优势?为什么脚本语言JavaScript能作为服务器语言?

优点 1    Node.js有超强的高并发能力

         Node.js的首发目标,是提供一种简单的,用语创建高性能服务器及在该服务器中运行各种应用程序的开发工具。

         相对于Java,PHP或者.net 等经典服务器端语言中,Node.js正像一个年轻力胜的小伙子,Java语言会为每一个客户端创建一个新的线程,而每一个客户端连接创建一个线程,需要耗费2MB的内存。也就是说。理论上一个8GB的服务器可以同时连接用户数为4000个左右,要存在高并发支持更多的用户,必须要额外增加服务器。

          Node.js不为每个客户连接创建一个新的线程,而仅仅使用一个线程。

          这就是Node基于单线程(只有一个主线程去接请求,给响应)

          那这不是更慢吗?事实上,并不是这样。

          Node.js当接收到一个用户连接,就会触发一个内部事件。通过事先定义好的函数,达到响应用户的行为。Node.js主线程并不关心程序要走什么流程,实际上,有另外的工作线程去帮Node主线程去存取文件,读数据库,当工作线程读取到文件数据,或数据库里面的数据,就会把回调函数返回给Node主线程去执行,例如 把找到的数据传回客户端,关闭连接一些操作。(这就是Node非阻塞I/O,基于事件驱动)。

         下面附上我画的一张图(如有不恰当之处请见谅哈)

Node.js是什么?优势是什么?

       这时候我们脑袋里面应该有个雏形,就是——Node.js主线程一直在接收请求和响应请求这个活里面倒腾,这样它就可以不停地接收多个客户端发过来的请求,它不用傻傻去等待IO操作,IO工作线程找到了数据,就会触发事件回调函数告诉主线程数据已经拿到了,这时候主线就执行回调函数,把数据返回给客户端。

      理论上,一个8G内存的服务器,可以同时容纳3到4万用户的连接。

     这就是Node的闪光之处(单线程,非阻塞IO,事件驱动)

优点  2  Node用的就是JavaScript的语法

     Node.JS 基于 javaScript 的 V8引擎,也就是说只要会JS的语法,就能用于后端开发,但是Node官方推荐用ECMA Script6(ES6)语法 。

       Node打破了过去JavaScript只能在浏览器运行的局面,让前后端编程环境统一,这样就大大降低了开发成本。(这一点对前端开发人员非常友好,JS能做的东西越来越多,前端发展就越来越快)

优点  3  Node.JS 出现促成前端工程化思想

        前端最近几年发展迅速,Node.js起到不可替代的作用。

        Node.js不仅仅是运行环境,也是一门脱胎换骨全新的JavaScript语言,它容纳了JS语法基础,还加入一些内部模块

        如:

               http用来处理请求响应的模块

               fs   用来读取文件的模块

               url   用来解析请求数据等等 

const http = require('http')

登录后复制

         Node.js还集成了 Npm  包管理工具,让我们可以很方便的通过命令行就能下载我们项目依赖的包

        如:

               npm install jquery 

               npm install -g webpack

               npm install  -g create-react-app    等等

           同样,只要在项目里面进行引入就能使用

 const  Jquery = require('jquery');

登录后复制

          Node 还支持 自定义模块语法   ↓↓

const app =()=>{     //模块代码     }module.exports = app;

登录后复制

const app = require('module/app.js');   //引入自定义模块

登录后复制

         Node.js 在某种层面上影响着前端开发的模式。让前端工程模块化,开发迅速,降低代码耦合度,可维护性大大增强。

Node.js适合做什么?

              下面列举几个Node.js应用场景

Node.js是什么?优势是什么?

          虽然以上列举这么多Node.js的优点,但是没有一门语言是没有缺点,Node也不例外。只能是一门语言适用于什么场景和领域而已。

       下面说说Node.js不适用的场景(加个大标题↓↓↓)

Node不适应的场景

       ①CPU计算密集型的程序

        在Node.js 0.8 版本之前,Node.js 不支持多线程。当然,这是一种设计哲学问题,因为Node.js的开发者和支持者坚信单线程和事件驱动的异步式编程比传统的多线程编程运行效率更高。但事实上多线程可以达到同样的吞吐量,尽管可能开销不小,但不必为多核环境进行特殊的配置。相比之下,Node.js 由于其单线程性的特性,必须通过多进程的方法才能充分利用多核资源。

        理想情况下,Node.js单线程在执行的过程中会将一个CPU核心完全占满,所有的请求必须等待当前请求处理完毕以后进入事件循环才能响应。如果一个应用是计算密集型的,那么除非你手动将它拆散,否则请求响应延迟将会相当大。例如,某个事件的回调函数中要进行复杂的计算,占用CPU 200毫秒,那么事件循环中所有的请求都要等待200毫秒。为了提高响应速度,你唯一的办法就是把这个计算密集的部分拆成若干个逻辑,这给编程带来了额外的复杂性。即使这样,系统的总吞吐量和总响应延迟也不会降低,只是调度稍微公平了一些。不过好在真正的Web 服务器中,很少会有计算密集的部分,如果真的有,那么它不应该被实现为即时的响应。正确的方式是给用户一个提示,说服务器正在处理中,完成后会通知用户,然后交给服务器的其他进程甚至其他专职的服务器来做这件事。

     ②单用户多任务型应用

前面我们讨论的通常都是服务器端编程,其中一个假设就是用户数量很多。但如果面对的是单用户,譬如本地的命令行工具或者图形界面,那么所谓的大量并发请求就不存在了。于是另一个恐怖的问题出现了,尽管是单用户,却不一定是单任务。例如给用户提供界面的同时后台在进行某个计算,为了让用户界面不出现阻塞状态,你不得不开启多线程或多进程。而Node.js 线程或进程之间的通信到目前为止还很不便,因为它根本没有锁,因而号称不会死锁。Node.js 的多进程往往是在执行同一任务,通过多进程利用多处理器的资源,但遇到多进程相互协作时,就显得捉襟见肘了。

     ③逻辑十分复杂的事务

Node.js 的控制流不是线性的,它被一个个事件拆散,但人的思维却是线性的,当你试图转换思维来迎合语言或编译器时,就不得不作出牺牲。举例来说,你要实现一个这样的逻辑:从银行取钱,拿钱去购买某个虚拟商品,买完以后加入库存数据库,这中间的任何一步都可能会涉及数十次的I/O操作,而且任何一次操作失败以后都要进行回滚操作。这个过程是线性的,已经很复杂了,如果要拆分为非线性的逻辑,那么其复杂程度很可能就达到无法维护的地步了。Node.js更善于处理那些逻辑简单但访问频繁的任务,而不适合完成逻辑十分复杂的工作。

   “好了,以上就是我总结了Node.js。不说了,写了很久了,去撸代码了。”

更多编程相关知识,请访问:编程教学!!

以上就是Node.js是什么?优势是什么?的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2634679.html

(0)
上一篇 2025年3月7日 04:35:50
下一篇 2025年2月23日 03:15:23

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • mac下更新node.js到最新版

    mac下怎么将nodejs升级到最新版?下面本篇文章给大家介绍一下方法。有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助。 相关推荐:《nodejs视频教程》 mac下升级node.js 第一步,查看当前版本 node -v …

    2025年3月7日
    200
  • Nodejs怎么结束进程

    相关推荐:《nodejs 教程》 NodeJS结束进程 Process:对象是一个全局变量,它提供有关当前 Node.js 进程的信息并对其进行控制。 作为一个全局变量,它始终可供 Node.js 应用程序使用,无需使用 require()…

    2025年3月7日
    200
  • 如何查看nodejs是否安装成功

    方法:1、在cmd窗口中执行“node -v”命令,显示node版本号,则安装成功。2、打开“控制面板”,依次点击“程序”-“程序和功能”,在程序列表中找到nodejs,则安装成功。3、在“开始”菜单中查找node程序,如果有则安装成功。 …

    2025年3月7日 编程技术
    200
  • 了解Nodejs中的模块载入

    本篇文章给大家介绍一下nodejs中的模块载入。有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助。 相关推荐:《nodejs》 使用Nodejs,就不可避免地引用第三方模块,它们有些是Nodejs自带的(例:http,net&…

    2025年3月7日 编程技术
    200
  • win怎样升级react native 和node.js

    win升级react native和node.js的方法:1、下载最新版本的nodejs,然后进行覆盖安装;2、升级react-native脚手架,然后升级项目的react-native即可。 本文操作环境:windows7系统、react…

    2025年3月7日
    200
  • node.js+koa搭建一个简单后台管理系统

    相关推荐:《nodejs 教程》 利用node.js 实现一个后台管理系统。node.js 常用框架express、koa。此项目用koa。 步骤 第一步:全局安装node.js 第二步:在本地建立项目目录。 第三步:安装本地依赖:npm …

    2025年3月7日 编程技术
    200
  • 深入浅析nodejs中的events模块

    本篇文章和大家详细介绍一下node中的events模块。有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助。 相关推荐:《node》 events模块是node的核心模块,几乎所有常用的node模块都继承了events模块,比如…

    2025年3月7日
    200
  • node.js使用multer中间件上传文件

    本篇文章给大家介绍一下node.js使用multer中间件解决post文件上传问题的方法。有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助。 相关推荐:《nodejs 教程》 body-parser中间件,其实“极不完美” —…

    2025年3月7日
    200
  • 浅谈Nodejs关闭进程的方法

    本篇文章和大家一起了解一下node关闭进程的方法。有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助。 相关推荐:《node》 NodeJS结束进程 Process:对象是一个全局变量,它提供有关当前 Node.js 进程的信息…

    2025年3月7日
    200
  • 分享几种实用的Node.js调试方法,快来收藏吧!!

    本篇文章给大家介绍nodejs调试的几种方式。有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助。 相关推荐:《nodejs 教程》 第一种 1、打开 vscode 内置终端,右上角选择 JavaScript Debug Ter…

    2025年3月7日 编程技术
    200

发表回复

登录后才能评论