首页 > 编程语言 >【个人理解】什么是Node.js、V8引擎、事件驱动、非阻塞式I/O

【个人理解】什么是Node.js、V8引擎、事件驱动、非阻塞式I/O

时间:2023-11-29 15:32:40浏览次数:50  
标签:Node 程序 阻塞 js 事件驱动 V8 操作

什么是Node.js?

【个人理解】什么是Node.js、V8引擎、事件驱动、非阻塞式I/O_V8

Node.js 是一个基于 ChromeV8 引擎的 JS 运行环境,允许你在服务器上构建你的应用程序。它采用了一套事件驱动、非阻塞式I/O模型,让 JS 可以运行在服务器上的开发平台。


为什么要用Node.js?

为什么现在主流前端框架Vue、React等都需要基于Node环境进行开发呢?

  1. 基本原因1:不基于Node环境开发,首先这些框架就使用不了
  2. 基本原因2:单个js文件都无法执行,更不可能运行那些 .vue,.jsx等文件
  3. 它有构建工具:前端框架通常需要使用构建工具来处理代码转换、模块打包、资源压缩等任务。而Node环境提供了强大的构建工具,如Webpack和Parcel,这些工具可以帮助开发者更高效地构建和打包前端应用。
  4. 它有包管理器:前端框架很多都需要各种依赖包,Node环境提供了npm,它是前端开发中常用的包管理器。通过npm,开发者可以方便地安装、管理和分享代码包,这对于前端框架的开发和使用非常重要。
  5. 它可以在服务器端渲染:Node环境使得前端框架可以在服务器端进行渲染,生成完整的HTML页面后再发送给客户端。这种方式可以提升首屏加载速度和搜索引擎优化(SEO)效果,因此在一些需要更好性能和用户体验的场景下很有用。


什么是ChromeV8 引擎?

【个人理解】什么是Node.js、V8引擎、事件驱动、非阻塞式I/O_事件驱动_02

V8 是Google Chrome 的一部分,也是Node.js 的一部分。它是解释器、编译器。通俗来讲,就是我们直接写的js程序语言,计算机底层CPU根本不知道是什么,CPU只认自己的指令集,而V8引擎就是做这件事的,且它能编译出不同平台的指令集,实现跨平台。(当然它的工作远不止这些,这里只说明它的主要工作)


什么是事件驱动?

事件驱动是一种设计模型,是一种编程思想(不仅限于前端)。

事件驱动其中程序的执行是由事件的发生和处理驱动的。在事件驱动编程中,程序通过监听和响应事件来执行相应的操作。

事件是指程序中发生的特定动作或状态的变化,例如用户点击按钮、键盘输入、网络请求完成等。当事件发生时,程序会触发相应的函数或方法来处理事件。

事件驱动编程通常使用事件循环机制。事件循环不断地监听事件,当事件发生时,调用相应的事件处理器或回调函数。事件驱动编程可以实现非阻塞的异步操作,提高程序的并发性能。

【个人理解】什么是Node.js、V8引擎、事件驱动、非阻塞式I/O_非阻塞_03

什么是非阻塞式I/O?

非阻塞式I/O是一种处理输入输出的方式,它不会阻塞程序的执行。在传统的阻塞式I/O中,当程序执行一个I/O操作时,程序会一直等待I/O操作完成,然后再继续执行后续的代码。这种方式会导致程序在等待I/O操作完成时无法执行其他任务。

相比之下,非阻塞式I/O使用一种异步的方式处理I/O操作。当程序执行一个I/O操作时,它会立即返回,而不需要等待I/O操作完成。程序可以继续执行后续的代码,而不会被阻塞。当I/O操作完成后,程序会得到通知,可以处理I/O操作的结果。

非阻塞式I/O通常与事件循环结合使用,例如在异步编程框架中。这种方式可以提高程序的并发性能,允许程序同时处理多个I/O操作,而不会被阻塞。

【个人理解】什么是Node.js、V8引擎、事件驱动、非阻塞式I/O_前端框架_04


【个人理解】什么是Node.js、V8引擎、事件驱动、非阻塞式I/O_V8_05




标签:Node,程序,阻塞,js,事件驱动,V8,操作
From: https://blog.51cto.com/u_16385820/8617008

相关文章

  • JsonResponse源码分析
    1.视图层返回JsonResponsereturnJsonResponse({'name':'kevin','age':19})2.触发JsonResponse的__init__方法将{'name':'kevin','age':19}传给data3.源码分析def__init__(self,data,encoder=DjangoJSONEn......
  • yaml/json/ini 配置读取
    ConfigParser安装ConfigParser是解析配置文件的第三方库,须要安装pipinstallConfigParserpipinstallConfigParserConfigParser介绍ConfigParser是用来读取配置文件(能够是.conf,txt,ini)的包配置文件的格式如下:中括号'[]'内包含的为section。section下面为option,相似......
  • 图文剖析 big.js 四则运算源码
    big.js,一个小型、快速的用于任意精度的十进制算术的JavaScript库。big.js用于解决平常项目中进行算术运算时精度丢失引起的结果不准确的问题。和big.js类似的两个库bignumber.js和decimal.js也都是出自同一作者(MikeMcl)之手。作者在这里详细说明了他们之间的区别big.......
  • vue Vite3出现错误runtime-core.esm-bundler.js:6835 Uncaught TypeError: normalize
    原因是在引入Element-Plus的顺序在vue之前导致,重新调整下他们的顺序后,问题解决。importAppfrom'./App.vue'import{setupI18n}from'/@/i18n'import{setupRouter}from'/@/router'import{setupStore}from'/@/store'importbusfrom'/@......
  • 手机直播源码,js实现懒加载、vue实现图片懒加载指令
    手机直播源码,js实现懒加载、vue实现图片懒加载指令图片懒加载监听滚动条滚动事件,当视口的高度+滚动高度,大于图片所在位置举例顶部的偏移量时(也就是距离),加载图片资源 index.html<!DOCTYPEhtml><html> <head>  <metacharset="UTF-8">  <metaname="viewport"conte......
  • 文件 inode 与 no space left on device 异常
    转载请注明出处:文件inode在Linux文件系统中,每一个文件或目录都会有一个inode,它是一个数据结构,用于存储文件的元数据,比如文件的权限、所有者、大小、创建和修改的时间等。inode不包含文件的实际内容,只包含文件的元数据。当你在文件系统中创建、修改或者删除文件时,实际上是在修......
  • js 拼接字符串带变量(js方法参数单双引号拼接的问题记录)
    小结:外面单引号,里面双引号,然后方法参数给转义的单引号即可(看下面的onClick事件即可)//刷新二级信号表格(增删改操作后)functionreloadSignal(subId){//清空$("#msgAll"+subId).empty();//js手工添加表格varhtmlStart='<spanstyle="position:......
  • nodejs 基于sharp + smartcrop 实现图片的智能提取排版
    属于一个简单的demo示例,主要是学习下sharp包对于图片的处理,以及基于smartcrop.js实现智能图片抠图结合sharp提供的图片组合能力,实现一个基于模版的图片组合,代码很简单简单任务描述就是有一个图片,我们需要智能的提取核心信息,并生成一个确定大小的图片,然后基于将生成的图片填充......
  • Golang Gin 获取Restful参数、URL查询参数,Form 表单参数,JSON格式参数
    前言http请求中,可以通过URL查询参数提交数据到服务器,可以通过post的json方式,还有一直方式就是Form表单。Form表单相比URL查询参数,用户体验好,可以承载更多的数据,尤其是文件上传时,特别方便。这里推荐飞雪无情的博客;写了一些列的gin的使用教程,很时候新手学习如果想对gin有一个完整......
  • JS对象文档 - FormData
    前言FormData接口提供了一种表示表单数据的键值对key/value的构造方式,并且可以轻松的将数据通过XMLHttpRequest.send()方法发送出去,本接口和此方法都相当简单直接。如果送出时的编码类型被设为"multipart/form-data",它会使用和表单一样的格式。正文构造函数constformData=n......