返回顶部
首页 > 资讯 > 前端开发 > JavaScript >JavaScript之事件循环案例讲解
  • 795
分享到

JavaScript之事件循环案例讲解

2024-04-02 19:04:59 795人浏览 泡泡鱼
摘要

js中的事件循环 因为javascript是单线程的,同一事件只能执行一种方法,所以会将程序中的方法加入到执行栈中按照后进先出的顺序依次执行,当遇见异步任务时不会被阻塞,而是将任务放

js中的事件循环

因为javascript是单线程的,同一事件只能执行一种方法,所以会将程序中的方法加入到执行栈中按照后进先出的顺序依次执行,当遇见异步任务时不会被阻塞,而是将任务放入事件队列中,继续执行执行栈中的同步代码,等当前执行栈中的所有任务都执行完毕则查找事件队列中的任务,并把任务的回调函数放入执行栈中,执行其中的同步代码,如此反复形成的循环被称为事件循环。

node.js

node.js特点

事件驱动

从上向下执行代码,当遇到需要回调的地方就加入到事件队列中,主线程运行完就去执行事件队列中的回调。整个过程不会阻塞新的事件,也不需要维护已经建立的事件

非阻塞io

主线程空闲时,就开始循环事件队列,处理事件队列中的事件,如果该事件不是io任务就亲自处理,如果是io任务,则交给线程池处理并指定回调函数,然后继续循环队列中的其他事件,当阻塞操作完成后会将结果和回调函数放入队列中,主线程循环到时就执行该回调函数。

node.js优缺点

优点

  1. 高并发:node.js用一个主线程处理所有的请求,然后对io操作进行异步处理,避开了创建、销毁线程以及在线程之间切换所需的开销和复杂性
  2. 适合io密集型应用

缺点:

  1. 不适合CPU密集型应用:长时间的计算会导致cpu时间片不能释放,使得后续io事件无法发起
  2. 不能充分利用多核cpu
  3. 可靠性低,一旦代码某个环节崩溃,整个系统都会崩溃

适用场景:

  1.  restful api:请求和响应只需少量的文本,不需要大量的逻辑处理。可以处理数万条连接,只需请求api组织数据并返回即可
  2. 大量ajax请求的场景中
  3. 聊天服务:轻量级,高流量,没有复杂的计算逻辑

node.js的事件循环 

node事件循环依靠libuv引擎,v8解释js代码后调用对应的node api,这些api由libuv引擎驱动执行对应任务,并把不同的事件放入不同的队列中等待主线程执行,因此node的事件循环存在于libuv引擎中

libuv引擎:实现了事件循环、文件操作等,是node.js实现异步的核心

node.js的单线程仅仅指JavaScript运行在单线程中,内部可以通过线程池完成io操作

poll(查询阶段)---》check(检查阶段)---》close callback(关闭事件回调阶段)---》timer(定时器检测阶段)---》io回调阶段---》闲置阶段---》轮询阶段

poll阶段(轮询阶段):

v8将js代码解析后传入libuv引擎中,循环首先进入poll阶段。先查看poll队列是否有事件,有就按先进先出顺序执行回调

到此这篇关于JavaScript之事件循环案例讲解的文章就介绍到这了,更多相关JavaScript之事件循环内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: JavaScript之事件循环案例讲解

本文链接: https://lsjlt.com/news/131206.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • JavaScript之事件循环案例讲解
    js中的事件循环 因为JavaScript是单线程的,同一事件只能执行一种方法,所以会将程序中的方法加入到执行栈中按照后进先出的顺序依次执行,当遇见异步任务时不会被阻塞,而是将任务放...
    99+
    2024-04-02
  • JavaScript之事件循环的示例分析
    这篇文章主要介绍JavaScript之事件循环的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!js中的事件循环因为JavaScript是单线程的,同一事件只能执行一种方法,所以会将程序中的方法加入到执行栈中按...
    99+
    2023-06-20
  • JavaScript 鼠标事件(MouseEvent)案例讲解
    鼠标事件-MouseEvent 当鼠标进行某种操作时,就会生成一个event对象,该对象记录着鼠标触发事件时的所有属性。 可以通过如下方法在google控制台打印出 MouseEve...
    99+
    2024-04-02
  • Javascript前端事件循环机制详细讲解
    目录一、消息队列和事件循环1.单线程处理机制2.事件循环机制3.消息队列4.IO线程5.页面使用单线程的缺点二、setTimeout1.浏览器怎么实现 setTimeout2.使用s...
    99+
    2022-12-30
    JavaScript事件循环机制 JS循环机制
  • 详解JavaScript事件循环
    目录一、事件循环的执行过程二、事件循环进阶用法三、JavaScript任务类型3.1 同步任务&异步任务3.2 宏任务&微任务JavaScript事件循环是一种机制,...
    99+
    2023-05-16
    JavaScript事件循环 JavaScript循环
  • JavaScript事件循环实例分析
    这篇文章主要讲解了“JavaScript事件循环实例分析”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“JavaScript事件循环实例分析”吧!前言异步函数也是有执行顺序的。本质上来说,Ja...
    99+
    2023-07-02
  • javascript事件循环event loop的示例分析
    小编给大家分享一下javascript事件循环event loop的示例分析,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!具体如下:js是单线程的,但是event loop的出现,使得js...
    99+
    2024-04-02
  • JavaScript中事件循环总结
    这篇文章主要讲解了“JavaScript中事件循环总结”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“JavaScript中事件循环总结”吧!js中的事件循环因为JavaScript是单线程的...
    99+
    2023-06-20
  • Node.js 事件循环详解及实例
    Node.js 事件循环详解及实例 Node.js 是单进程单线程应用程序,但是通过事件和回调支持并发,所以性能非常高。 Node.js 的每一个 API 都是异步的,并作为一个独立线程运行,...
    99+
    2022-06-04
    详解 实例 事件
  • Node异步和事件循环的深入讲解
    目录前言为什么要异步?如何实现异步?基于事件循环的异步编程模型timerspendingidle、preparepollcheckclose一些注意事项总结参考资料前言 Node 最...
    99+
    2024-04-02
  • JavaScript DOMContentLoaded事件案例详解
    DOMContentLoaded 事件 字面上看,它会在dom加载完成后触发。 与window.onload事件非常相似,但有一定区别: DOMContentLoaded ...
    99+
    2024-04-02
  • Javascript单线程和事件循环实例分析
    本篇内容介绍了“Javascript单线程和事件循环实例分析”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一、单线程Javascript 是...
    99+
    2023-07-02
  • Javascript单线程和事件循环
    目录一、单线程二、事件循环三、事件循环的应用四、使用代码来说明五、setTimeout()六、思考:劣质的优化一、单线程 Javascript 是单线程的,意味着不会有其他线程来竞争...
    99+
    2024-04-02
  • JavaScript中的事件循环方式
    目录概述原理同步>微任务>宏任务案例解析能否先将promise.then分发到微任务中js是单线程,非阻塞,试想如果是多线程,一个线程在某个DOM节点上添加内容,另一个线...
    99+
    2024-04-02
  • 深入了解Javascript的事件循环机制
    目录单线程的Javascript同步 vs 异步 宏任务 vs 微任务定时器To Be Continued单线程的Javascript JavaScript是一种单线程语言,它主要用...
    99+
    2024-04-02
  • Java之SpringCloudAlibaba Sentinel组件案例讲解
    Sentinel 是什么 随着微服务的流行,服务和服务之间的稳定性变得越来越重要。Sentinel 以流量为切入点,从流量控制、熔断降级、系统负载保护等多个维度保护服务的稳定性。 官...
    99+
    2024-04-02
  • Vue中addEventListener()监听事件案例讲解
    目录一、语法二、事件冒泡或事件捕获?三、拓展阅读addEventListener()事件监听一、语法 element.addEventListener(event, function...
    99+
    2022-12-31
    vue addEventListener监听事件 addEventListener监听事件 addEventListener事件
  • JS面试之对事件循环的理解
    目录一、是什么事件循环(Event Loop)二、宏任务与微任务微任务宏任务三、async与awaitasyncawait四、流程分析 一、是什么 JavaScript 在...
    99+
    2024-04-02
  • JavaScript防抖案例讲解
    原理 防抖的原理是:你尽管触发事件,但是我一定要在事件触发n秒之后才执行,如果你在一个事件触发的n秒内又触发了这个事件,那我就以新的事件的时间为准,n秒后再执行。总之,就是要等到你触...
    99+
    2024-04-02
  • 详解Javascript基础之循环
    目录循环forfor-infor-ofwhiledo-while跳出循环总结循环 for 循环是任何一门语言都会有个命令,用于反复执行某段代码。 例如,循环代码块5次: for ...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作