Node.js简单入门前传

发布时间 - 2026-01-11 02:53:31    点击率:

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入门教程  # 多个  # 是一个  # 单线程  # 自己的  # 非常好  # 如果你  # 服务端  # 往下  # 拿到了  # 回调  # 小编  # 越长  # 的是  # 这是  # 就会  # 也不  # 运行环境  # 也有  # 完成后  # 你是 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: php静态变量怎么调试_php静态变量作用域调试技巧【解答】  如何自定义建站之星模板颜色并下载新样式?  企业网站制作这些问题要关注  微信小程序制作网站有哪些,微信小程序需要做网站吗?  详解Huffman编码算法之Java实现  Win11关机界面怎么改_Win11自定义关机画面设置【工具】  html如何与html链接_实现多个HTML页面互相链接【互相】  详解免费开源的DotNet二维码操作组件ThoughtWorks.QRCode(.NET组件介绍之四)  如何使用 Go 正则表达式精准提取括号内首个纯字母标识符(忽略数字与嵌套)  Laravel用户密码怎么加密_Laravel Hash门面使用教程  极客网站有哪些,DoNews、36氪、爱范儿、虎嗅、雷锋网、极客公园这些互联网媒体网站有什么差异?  手机钓鱼网站怎么制作视频,怎样拦截钓鱼网站。怎么办?  Laravel 419 page expired怎么解决_Laravel CSRF令牌过期处理  常州企业网站制作公司,全国继续教育网怎么登录?  C语言设计一个闪闪的圣诞树  浅析上传头像示例及其注意事项  微信小程序 五星评分(包括半颗星评分)实例代码  SQL查询语句优化的实用方法总结  Laravel如何实现一对一模型关联?(Eloquent示例)  如何用wdcp快速搭建高效网站?  canvas 画布在主流浏览器中的尺寸限制详细介绍  如何快速搭建高效WAP手机网站吸引移动用户?  简单实现Android文件上传  Laravel如何设置自定义的日志文件名_Laravel根据日期或用户ID生成动态日志【技巧】  如何用IIS7快速搭建并优化网站站点?  电商网站制作价格怎么算,网上拍卖流程以及规则?  Laravel定时任务怎么设置_Laravel Crontab调度器配置  为什么php本地部署后css不生效_静态资源加载失败修复技巧【技巧】  如何快速查询域名建站关键信息?  如何在Windows服务器上快速搭建网站?  网站建设保证美观性,需要考虑的几点问题!  如何基于PHP生成高效IDC网络公司建站源码?  香港服务器部署网站为何提示未备案?  深圳网站制作公司好吗,在深圳找工作哪个网站最好啊?  网站优化排名时,需要考虑哪些问题呢?  QQ浏览器网页版登录入口 个人中心在线进入  百度输入法ai组件怎么删除 百度输入法ai组件移除工具  Laravel Artisan命令怎么自定义_创建自己的Laravel命令行工具完全指南  齐河建站公司:营销型网站建设与SEO优化双核驱动策略  高防服务器租用首荐平台,企业级优惠套餐快速部署  Laravel项目如何进行性能优化_Laravel应用性能分析与优化技巧大全  如何快速重置建站主机并恢复默认配置?  Laravel如何使用.env文件管理环境变量?(最佳实践)  Laravel怎么进行浏览器测试_Laravel Dusk自动化浏览器测试入门  制作旅游网站html,怎样注册旅游网站?  Laravel如何实现本地化和多语言支持_Laravel多语言配置与翻译文件管理  免费的流程图制作网站有哪些,2025年教师初级职称申报网上流程?  如何自定义safari浏览器工具栏?个性化设置safari浏览器界面教程【技巧】  Laravel如何使用Blade模板引擎?(完整语法和示例)  微信小程序 HTTPS报错整理常见问题及解决方案