1.什么是NodeJS

简单的说 Node.js 就是运行在服务端的 JavaScript。
Node.js 是一个基于Chrome JavaScript 运行时建立的一个平台。
Node.js是一个事件驱动I/O服务端JavaScript环境,基于Google的V8引擎(Google的Chrome浏览器使用的JavaScript执行环境),
V8引擎执行Javascript的速度非常快,性能非常好。
2.为什么选择NodeJS
如果你是一个前端程序员,你不懂得像PHP、Python或Ruby等动态编程语言,然后你想创建自己的服务,那么Node.js是一个非常好的选择。
Node.js 是运行在服务端的 JavaScript,如果你熟悉Javascript,那么你将会很容易的学会Node.js。
当然,如果你是后端程序员,想部署一些高性能的服务,那么学习Node.js也是一个非常好的选择。
3.NodeJS的特点
我们先来看看NodeJS官网上的介绍:
Node.js is a platform built on Chrome's JavaScript runtime for easily building fast, scalable network applications. Node.js uses an event-driven, non-blocking I/O model that makes it lightweight and efficient, perfect for data-intensive real-time applications that run across distributed devices.
其特点为:
1. 它是一个Javascript运行环境
2. 依赖于Chrome V8引擎进行代码解释
3. 事件驱动
4. 非阻塞I/O
5. 轻量、可伸缩,适于实时数据交互应用
6. 单进程,单线程
异步、事件驱动模型
我们同样是要发起请求,等待服务器端响应;但是与银行例子不同的是,这次我们点完餐后拿到了一个号码,
拿到号码,我们往往会在位置上等待,而在我们后面的请求会继续得到处理,同样是拿了一个号码然后到一旁等待,接待员能一直进行处理。
等到饭菜做号了,会喊号码,我们拿到了自己的饭菜,进行后续的处理(吃饭)
这个喊号码的动作在NodeJS中叫做回调(Callback),能在事件(烧菜,I/O)处理完成后继续执行后面的逻辑(吃饭),
这体现了NodeJS的显著特点,异步机制、事件驱动
整个过程没有阻塞新用户的连接(点餐),也不需要维护已经点餐的用户与厨师的连接
Node.Js使用事件驱动模型,当web server接收到请求,就把它关闭然后进行处理,然后去服务下一个web请求。当这个请求完成,它被放回处理队列,当到达队列开头,这个结果被返回给用户。这个模型非常高效可扩展性非常强,因为webserver一直接受请求而不等待任何读写操作。(这也被称之为非阻塞式IO或者事件驱动IO)
基于这样的机制,理论上陆续有用户请求连接,NodeJS都可以进行响应,因此NodeJS能支持比Java、PHP程序更高的并发量
虽然维护事件队列也需要成本,再由于NodeJS是单线程,事件队列越长,得到响应的时间就越长,并发量上去还是会力不从心
总结一下NodeJS是怎么解决并发连接这个问题的:
更改连接到服务器的方式,每个连接发射(emit)一个在NodeJS引擎进程中运行的事件(Event),放进事件队列当中,
而不是为每个连接生成一个新的OS线程(并为其分配一些配套内存)
I/O阻塞
NodeJS解决的另外一个问题是I/O阻塞,看看这样的业务场景:需要从多个数据源拉取数据,然后进行处理
(1)串行获取数据,这是我们一般的解决方案,以PHP为例
假如获取profile和timeline操作各需要1S,那么串行获取就需要2S
(2)NodeJS非阻塞I/O,发射/监听事件来控制执行过程
NodeJS遇到I/O事件会创建一个线程去执行,然后主线程会继续往下执行的,
因此,拿profile的动作触发一个I/O事件,马上就会执行拿timeline的动作,
两个动作并行执行,假如各需要1S,那么总的时间也就是1S
它们的I/O操作执行完成后,发射一个事件,profile和timeline,
事件代理接收后继续往下执行后面的逻辑,这就是NodeJS非阻塞I/O的特点
总结一下:
Java、PHP也有办法实现并行请求(子线程),但NodeJS通过回调函数(Callback)和异步机制会做得很自然
4. NodeJS的优缺点
优点:
1. 高并发(最重要的优点)
2. 适合I/O密集型应用
缺点:
1. 不适合CPU密集型应用;CPU密集型应用给Node带来的挑战主要是:由于JavaScript单线程的原因,如果有长时间运行的计算(比如大循环),将会导致CPU时间片不能释放,使得后续I/O无法发起;
解决方案:分解大型运算任务为多个小任务,使得运算能够适时释放,不阻塞I/O调用的发起;
2. 只支持单核CPU,不能充分利用CPU
3. 可靠性低,一旦代码某个环节崩溃,整个系统都崩溃
原因:单进程,单线程
解决方案:(1)Nnigx反向代理,负载均衡,开多个进程,绑定多个端口;
(2)开多个进程监听同一个端口,使用cluster模块;
4. 开源组件库质量参差不齐,更新快,向下不兼容
5. Debug不方便,错误没有stack trace
总结
以上所述是小编给大家介绍的Node.js简单入门前传,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对网站的支持!
# node.js
# 入门
# Node.js包管理器Yarn的入门介绍与安装
# Node.js的Web模板引擎ejs的入门使用教程
# Node.js+Express配置入门教程详解
# 零基础搭建Node.js、Express、Ejs、Mongodb服务器及应用开发入门
# Java开发者结合Node.js编程入门教程
# Node.js入门教程:在windows和Linux上安装配置Node.js图文教程
# node.js入门教程
# 多个
# 是一个
# 单线程
# 自己的
# 非常好
# 如果你
# 服务端
# 往下
# 拿到了
# 回调
# 小编
# 越长
# 的是
# 这是
# 就会
# 也不
# 运行环境
# 也有
# 完成后
# 你是
相关文章:
javascript基本数据类型及类型检测常用方法小结
广州建站公司哪家好?十大优质服务商推荐
如何用AWS免费套餐快速搭建高效网站?
网站制作需要会哪些技术,建立一个网站要花费多少?
制作门户网站的参考文献在哪,小说网站怎么建立?
详解免费开源的.NET多类型文件解压缩组件SharpZipLib(.NET组件介绍之七)
香港服务器租用费用高吗?如何避免常见误区?
广州网站制作公司哪家好一点,广州欧莱雅百库网络科技有限公司官网?
建站之星2.7模板:企业网站建设与h5定制设计专题
Python路径拼接规范_跨平台处理说明【指导】
定制建站流程步骤详解:一站式方案设计与开发指南
深圳网站制作费用多少钱,读秀,深圳文献港这样的网站很多只提供网上试读,但有些人只要提供试读的文章就能全篇下载,这个是怎么弄的?
小说建站VPS选用指南:性能对比、配置优化与建站方案解析
昆明网站制作哪家好,昆明公租房申请网上登录入口?
设计网站制作公司有哪些,制作网页教程?
如何通过网站建站时间优化SEO与用户体验?
如何在Golang中指定模块版本_使用go.mod控制版本号
如何在IIS7中新建站点?详细步骤解析
如何有效防御Web建站篡改攻击?
金*站制作公司有哪些,金华教育集团官网?
如何通过多用户协作模板快速搭建高效企业网站?
香港代理服务器配置指南:高匿IP选择、跨境加速与SEO优化技巧
已有域名建站全流程解析:网站搭建步骤与建站工具选择
网站视频怎么制作,哪个网站可以免费收看好莱坞经典大片?
如何用好域名打造高点击率的自主建站?
如何快速启动建站代理加盟业务?
制作网站的过程怎么写,用凡科建站如何制作自己的网站?
建站之星安装失败:服务器环境不兼容?
济南网站制作的价格,历城一职专官方网站?
高防服务器租用首荐平台,企业级优惠套餐快速部署
股票网站制作软件,网上股票怎么开户?
高端企业智能建站程序:SEO优化与响应式模板定制开发
学校为何禁止电信移动建设网站?
如何快速搭建自助建站会员专属系统?
建站之家VIP精选网站模板与SEO优化教程整合指南
网站制作中优化长尾关键字挖掘的技巧,建一个视频网站需要多少钱?
行程制作网站有哪些,第三方机票电子行程单怎么开?
制作农业网站的软件,比较好的农业网站推荐一下?
网站制作公司广州有几家,广州尚艺美发学校网站是多少?
网站规划与制作是什么,电子商务网站系统规划的内容及步骤是什么?
网站网页制作专业公司,怎样制作自己的网页?
免费制作小说封面的网站有哪些,怎么接网站批量的封面单?
,网页ppt怎么弄成自己的ppt?
南阳网站制作公司推荐,小学电子版试卷去哪里找资源好?
建站之星后台密码遗忘?如何快速找回?
建站主机功能解析:服务器选择与快速搭建指南
已有域名如何快速搭建专属网站?
rsync同步时出现rsync: failed to set times on “xxxx”: Operation not permitted
建站之星价格显示格式升级,你的预算足够吗?
如何快速上传自定义模板至建站之星?
*请认真填写需求信息,我们会在24小时内与您取得联系。