首页 > 软件开发 > JavaScript >

JavaScript中EventLoop

来源:互联网 2023-03-16 23:57:29 241

比如浏览器在运行一个复杂的图像转换算法,因为是单线程的,所以此时浏览器进程被阻塞了,不能进行界面渲染,也不能运行其他代码,你的应用界面会失去和用户的交互。iFq办公区 - 实用经验教程分享!

这一般情况下还不会有大问题,但是当浏览器在同时运行多个类似的算法时,这个问题就很严重了。iFq办公区 - 实用经验教程分享!

JavaScript中EventLoopiFq办公区 - 实用经验教程分享!

工具/原料

  • JavaScript

方法/步骤

  • 1

    js开发人员大多都理解代码的异步执行,特别是ajax的使用。iFq办公区 - 实用经验教程分享!

    JavaScript中EventLoopiFq办公区 - 实用经验教程分享!

  • 2

    这里response 将不会得到你想要的结果。iFq办公区 - 实用经验教程分享!

    而是需要像相面这样,通过 callback函数的方式,获取结果。iFq办公区 - 实用经验教程分享!

    JavaScript中EventLoopiFq办公区 - 实用经验教程分享!

  • 3

    这里面提醒一下下面的代码, async: false永远都不是一个好主意。iFq办公区 - 实用经验教程分享!

    JavaScript中EventLoopiFq办公区 - 实用经验教程分享!

  • 3此文章未经授权抓取自百度经验
  • 4

    通过上面的例子应该理解通过 异步 函数,可以帮助解决类似浏览器阻塞问题。iFq办公区 - 实用经验教程分享!

    当然还可以通过 setTimeout(callback, milliseconds)实现同样的逻辑。iFq办公区 - 实用经验教程分享!

    JavaScript中EventLoopiFq办公区 - 实用经验教程分享!

  • 5

    Event Loop有一个简单的Job(task) - 监视Call Stack和Callback Queue。如果调用堆栈为空,它将从队列中取出第一个事件,并将其推送到调用堆栈,从而有效地运行它。iFq办公区 - 实用经验教程分享!

    这种迭代在事件循环中被称为Tick。每个事件只是一个函数回调。iFq办公区 - 实用经验教程分享!

    JavaScript中EventLoopiFq办公区 - 实用经验教程分享!

  • 6

    执行这段代码,下面的调用栈清楚的演示了事件循环的处理流程。iFq办公区 - 实用经验教程分享!

    JavaScript中EventLoopiFq办公区 - 实用经验教程分享!

  • 7

    setTimeout(...)不会自动将回调放在事件循环队列中。iFq办公区 - 实用经验教程分享!

    它设置了一个计时器。当计时器到期时,浏览器将你的回调放到事件循环中,以便将来的一些tick会执行。但是,队列中可能还有其他事件已经被添加了 - 回调将不会立即执行。iFq办公区 - 实用经验教程分享!

    有很多关于开始使用JavaScript中的异步代码的文章和教程,建议使用setTimeout(callback,0)。现在知道Event Loop是怎么做的,以及setTimeout是如何工作的。iFq办公区 - 实用经验教程分享!

    就能更好的理解下面的代码iFq办公区 - 实用经验教程分享!

    JavaScript中EventLoopiFq办公区 - 实用经验教程分享!

  • 8

    尽管等待时间设置为0 ms,但浏览器控制台中的结果如下所示:iFq办公区 - 实用经验教程分享!

    HiiFq办公区 - 实用经验教程分享!

    ByeiFq办公区 - 实用经验教程分享!

    callbackiFq办公区 - 实用经验教程分享!

  • 以上方法由办公区教程网编辑摘抄自百度经验可供大家参考!iFq办公区 - 实用经验教程分享!


    标签: JAVASCRIPT

    办公区 Copyright © 2016-2023 www.bgqu.net. Some Rights Reserved. 备案号:湘ICP备2020019561号统计代码