【Node.js入门之—1.1Node.js 简介】

Node.js入门之—1.1Node.js 简介

文章目录

  • Node.js入门之—1.1Node.js 简介
    • 什么是 Node.js
      • 错误说法
    • Node.js 的特点
      • 跨平台
      • 三方类库
      • 自带http服务器
      • 非阻塞I/O
      • 事件驱动
      • 单线程
    • Node.js 的应用场合
      • 适合用Node.js的场合
      • 不适合用Node.js的场合
      • 弥补Node.js不足的解决方案

什么是 Node.js

  • Node.js简称Node,是一个可以使JavaScript运行在服务器端的开发平台。
  • JavaScript本是一种Web前端语言,Node.js让JavaScript成为服务器端脚本语言。
  • Node.js选择JavaScript作为实现语言的原因:
    • JavaScript满足CommonJS标准,符合事件驱动,用户较多且门槛较低;
    • Chrome的V8引擎具有出色的性能。
  • Node.js将V8引擎封装起来,作为服务器运行平台,以执行JavasScript编写的后端脚本程序。

错误说法

Node.js是一门编程语言? ×
Node.js 是新版本的 JavaScript? ×

  • Node.js运行时环境包含执行JavaScript程序所需的一切条件。该引擎会将JavaScript代码转换为更快的机器码。
  • Node.js进一步提升JavaScript的能力,使JavaScript可以访问文件、读取数据库、访问进程,从而胜任后端任务。
  • 使用Node.js 的最大优点是开发人员可以在客户端和服务器端编写JavaScript,打通了前后端。
  • Node.js发展迅速,目前已成为JavaScript服务器端运行平台的事实标准。

Node.js 的特点

跨平台

  • Node.js是跨平台的,能运行在Windows、macOS和Linux平台上。

三方类库

  • Node.js除了自己的标准类库之外,还可使用大量的第三方模块系统来实现代码的分享和重用。

自带http服务器

  • 与其他后端脚本语言不同的是,Node.js内置了处理网络请求和响应的函数库,也就是自备了HTTP服务器,所以不需要额外部署HTTP服务器。

Node.js与PHP对HTTP请求的处理

非阻塞I/O

  • 非阻塞I/O又称异步式I/O,是Node.js的重要特点。
  • 阻塞I/O是指线程在执行过程中遇到I/O操作时,操作系统会撤销该线程的CPU控制权,使其暂停执行,处于等待状态,同时将资源转让给其他线程。
  • 非阻塞I/O是指当线程遇到I/O操作时,不会以阻塞方式等待I/O操作完成或数据返回,而只是将I/O请求转发给操作系统,继续执行下一条指令。
    Node.js的非阻塞I/O

事件驱动

  • 非阻塞I/O是一种异步方式的I/O,与事件驱动密不可分。
  • 事件驱动以事件为中心,Node.js将每一个任务都当成事件来处理。Node.js在执行过程中会维护一个事件队列,需执行的每个任务都会加入事件队列并提供一个包含处理结果的回调函数。
  • 在事件驱动模型中,会生成一个事件循环线程来监听事件,不断地检查是否有未处理的事件。
  • Node.js的异步机制是基于事件的,所有磁盘I/O、网络通信、数据库查询事件都以非阻塞的方式请求,返回的结果由事件循环线程来处理。
    Node.js事件循环机制

单线程

  • Node.js的应用程序是单进程、单线程的,但是通过事件和回调支持并发,性能变得非常高。
  • 在阻塞模式下,一个线程只能处理一项任务,要想提高吞吐量必须使用多线程。
  • 在非阻塞模式下,线程不会被I/O操作阻塞,该线程所使用的CPU核心利用率永远是100%,I/O操作以事件的方式通知操作系统。
  • Node.js在主线程中维护一个事件队列,当接收到请求后,就将该请求作为一个事件放入该队列中,然后继续接收其他请求。
  • Node.js内部通过线程池来完成非阻塞I/O操作,Node.js的单线程是指对JavaScript层面的任务处理是单线程的,而Node.js本身是一个多线程平台。

Node.js采用非阻塞I/O与事件驱动相结合的编程模式,与传统同步I/O线性编程思维有很大的不同,Node.js程序的控制很大程度要依靠事件和回调函数,这不符合开发人员的常规线性思路,需要将一个完整的逻辑拆分为若干单元(事件),从而增加了开发和调试的难度。

Node.js 的应用场合

适合用Node.js的场合

  • REST API:REST API是一种前后端分离的应用程序架构。
  • 单页Web应用:加载单个HTML页面,并在用户与应用程序交互时动态更新该页面的Web应用程序。
  • 统一Web应用的UI层:Node.js是面向服务的架构,其能够更好地实现前后端的依赖分离,可以将所有的关键业务逻辑都封装成REST API,UI层只需要考虑如何用这些API构建具体的应用。
  • 准实时系统:如聊天系统、微博系统、博客系统的准实时社交系统,特点是轻量级、高流量,没有复杂的计算逻辑。
  • 游戏服务器:程序员不必使用C语言就能开发游戏的服务器程序。
    微服务架构:Node.js也可用于实现基于微服务架构的应用。

不适合用Node.js的场合

  • 数据加密和解密。
  • 数据压缩和解压。
  • 模板渲染。

弥补Node.js不足的解决方案

存在的问题解决方案
CPU密集型任务偏向于CPU计算操作,需要Node.js直接处理,在事件队列中,如果前面的CPU计算任务没有完成,那么后面的任务就会被阻塞,出现响应慢的情况,使得后续I/O操作无法发起将大型运算任务分解为多个小任务,适时释放CPU计算空间资源,以免阻塞I/O调用的发起
单线程无法利用多核CPU。多CPU或多核CPU的服务器当Node.js被CPU密集型任务占用,导致其他任务被阻塞时,其他CPU核心处于闲置状态,从而造成资源浪费;Node.js程序一旦在某个环节崩溃,整个系统都会崩溃,这会影响其可靠性(1)部署Nginx反向代理和负载均衡,开启多个进程,绑定多个端口(2)使用cluster模块构建应用集群,启动多个Node.js实例,开启多个进程以监听同一个端口

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/133984.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

cordova Xcode打包ios以及发布流程(ionic3适用)

第一步 1、申请iOS证书 2、导入证书到钥匙串 第二步 1、xcode配置iOS证书 1.1用Xcode打开你的项目(我的Xcode版本是新版) 修改如下图 回到基本信息设置界面,Bundie 这项填写,最先创建的那个appid,跟创建iOS描述文件时选…

决策式AI与生成式AI

人工智能中深度学习,是一种受人脑的生物神经网络机制启发,并模仿人脑来解释、处理数据的机器学习技术,它能自动对数据进行特征提取、识别、决策和生成。它可以从不同的维度进行划分,如果按模型的特点来划分可分为决策式AI和生成式…

2023年中国金融控股公司研究报告

第一章 行业概况 1.1 定义 金融控股公司这一术语最初源自美国,特别是在美国的《金融服务法案》关于银行控股公司组织结构的条文中,首次出现了“金融控股公司”(Financial Holding Company)这一法律术语,尽管法案中并…

红黑数原理及存在原因

我红黑树那么牛,你们为什么不用?_哔哩哔哩_bilibili 面试时经常会被问到红黑树,它到底有什么优点呢? 对于查找数据,数组二分查询速度最快,时间复杂度为O(logN)。但是如果增加和删除数据,数组就…

ARMday02(汇编语法、汇编指令)

汇编语法 汇编文件中的内容 1.伪操作:在汇编程序中不占用存储空间,但是可以在程序编译时起到引导和标识作用 .text .global .glbal .if .else .endif .data .word.... 2.汇编指令:每一条汇编指令都用来标识一个机器码,让计算机做…

深度学习中的数据类型介绍:FP32, FP16, TF32, BF16, Int16, Int8 ...

文章目录 0. 前言1. 数据的存储方式2. 不同数据类型介绍2.1 深度学习中常用的数据类型2.2 BF16 类型的优势2.3 不同数据类型的使用场景 0. 前言 相比于 CPU,GPU 在架构设计时将更多的晶体管用于数据处理,而不是数据缓存和流量控制,因此可以高…

致:CSGO游戏搬砖人的一封信

最近大家还在坚持操作CSGO游戏搬砖项目不? 这个项目虽是稳赚项目,但也有行情好和行情不好的时候,平台的大中小各种活动的举办,都会对我们的项目造成一定影响。行情的上下波动势必然会影响卡价的波动,影响选品的快慢&a…

棱镜七彩亮相工控中国大会,以软件供应链安全助力新型工业化高质量发展

2023年11月1日-3日,2023第三届工控中国大会在苏州国际会议中心举办,本届大会由中国电子信息产业发展研究院、中国工业经济联合会、国家智能制造专家委员会、国家产业基础专家委员会、江苏省工业和信息化厅、江苏省国有资产监督管理委员会、苏州市人民政府…

HTML 表格

<!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>表格标签</title>/* <style>.yun {widt…

C++学习 --函数

目录 1&#xff0c; 函数定义 1-1&#xff0c; 有返回值 1-2&#xff0c; 无返回值 2&#xff0c; 函数声明 3&#xff0c; 函数分文件编写 3-1&#xff0c; 创建自定义头文件 3-2&#xff0c; 创建源文件 3-3&#xff0c; 自定义头文件中编写函数声明 3-4&#xff0c…

北京陪诊小程序|陪诊系统开发|陪诊小程序未来发展不可小觑

近几年随着互联网快速发展&#xff0c;各行业领域都比较注重线上服务系统&#xff0c;通过陪诊小程序开发可以满足更多用户使用需求&#xff0c;同时还能提高用户使用体验。现在陪诊类的软件应用得到全面推广&#xff0c;在医疗行业当中陪诊小程序更贴近用户生活&#xff0c;可…

【漏洞复现】Apache_Tomcat7+ 弱口令 后台getshell漏洞

感谢互联网提供分享知识与智慧&#xff0c;在法治的社会里&#xff0c;请遵守有关法律法规 文章目录 1.1、漏洞描述1.2、漏洞等级1.3、影响版本1.4、漏洞复现1、基础环境2、漏洞扫描3、漏洞验证 说明内容漏洞编号漏洞名称Tomcat7 弱口令 && 后台getshell漏洞漏洞评级高…

掌动智能:功能测试及拨测主要功能

在企业中对于功能测试及拨测而言&#xff0c;用户只需提供应用包和产品文档&#xff0c;由资深测试专家设计并执行测试&#xff0c;覆盖核心场景&#xff0c;包含特定业务流程以及行业通用特殊场景&#xff0c;支持需求定制。 执行过程严格监控&#xff0c;依据应用功能和业务需…

8年资深测试总结,接口自动化框架的设计与实现,一文打通...

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 1、自动化测试框架…

Ionic 模块组件的理解

1 Ionic4.x 文件分析 1.1 app.module.ts 分析 Ionic 是一个基于 Angular 的移动应用开发框架&#xff0c;能帮助开发者使用 Web 技术&#xff08;HTML5、CSS3、JavaScript&#xff09;创建跨平台的应用程序。在 Ionic 应用程序中&#xff0c;app.module.ts 文件是整个应用程序的…

基于javaweb+mysql的jsp+servlet学生成绩管理系统(管理员、教师、学生)

博主24h在线&#xff0c;想要源码文档部署视频直接私聊&#xff0c;9.9元拿走&#xff01; 基于javawebmysql的jspservlet学生成绩管理系统(管理员、教师、学生)(javajspservletjavabeanmysqltomcat) 运行环境 Java≥8、MySQL≥5.7、Tomcat≥8 开发工具 eclipse/idea/myecl…

UE5 c++将自定义UserWdiget添加到对应菜单栏

前言&#xff1a; 为了实现与UserWidget一致的右键添加&#xff0c;便有了此章 注&#xff1a;这里使用的是UE5.3 目标内容&#xff1a; 这里可以参考UserWidget的源码&#xff0c;拷贝一份属于自己的就ok&#xff08;本篇章只是全改成了属于自己的CommonUserWidget&#xff…

Android 使用.9图 NinePatchDrawable实现动态聊天气泡

最近一段时间&#xff0c;在做一个需求&#xff0c;需要实现一个聊天气泡的动画效果&#xff0c;如下图所示&#xff1a; GitHub源码demo &#xff0c;建议下载demo&#xff0c;运行查看。 动态聊天气泡动画 静态聊天气泡 经过一段时间调研&#xff0c;实现方案如下: 实现方…

栈(定义,基本操作,顺序存储,链式存储)

目录 1.栈的定义1.重要术语2.特点 2.栈的基本操作3.栈的顺序存储1.顺序栈的定义2.基本操作1.初始化2.进栈3.出栈4.读栈顶 3.共享栈 4.栈的链式存储 1.栈的定义 栈( Stack&#xff09;是只允许在一端进行插入或删除操作的线性表。 一种受限的线性表&#xff0c;只能在栈顶进行插…

高校为什么需要大数据挖掘平台?

目前数据挖掘已经成为各种应用领域的重要技术&#xff0c;大学数据挖掘课程的开放已经出现。数据挖掘课程整合了多门学科知识。该课程包括各种理论知识&#xff0c;也离不开相关的实用技术。整个教学过程是培养和提高学生全面创新和解决问题的能力。过去&#xff0c;教学过程理…