您好,欢迎来到三六零分类信息网!老站,搜索引擎当天收录,欢迎发信息

JS里EventLoop的使用详解

2024/5/16 6:36:28发布22次查看
这次给大家带来js里eventloop的使用详解,js里eventloop使用的注意事项有哪些,下面就是实战案例,一起来看一下。
想象下,比如浏览器在运行一个复杂的图像转换算法,因为是单线程的,所以此时浏览器进程被阻塞了,不能进行界面渲染,也不能运行其他代码,你的应用界面会失去和用户的交互。
这一般情况下还不会有大问题,但是当浏览器在同时运行多个类似的算法时,这个问题就很严重了。
有一定经验js开发人员大多都理解代码的异步执行,特别是ajax的使用。
// ajax(..) is some arbitrary ajax function given by a library var response = ajax('https://example.com/api'); console.log(response); // `response` won't have the response
这里response 将不会得到你想要的结果。
而是需要像相面这样,通过 callback函数的方式,获取结果
ajax('https://example.com/api', function(response) {   console.log(response); // `response` is now available });
另外这里面提醒一下,下面的代码, async: false永远都不是一个好主意。
// this is assuming that you're using jquery jquery.ajax({   url: 'https://api.example.com/endpoint',   success: function(response) {     // this is your callback.   },   async: false // and this is a terrible idea });
通过上面的例子,我们应该理解通过 异步 函数,可以帮助我们解决 类似浏览器阻塞问题。
当然还可以通过 settimeout(callback, milliseconds)实现同样的逻辑。如果你理解了异步,下面代码执行会输出什么呢?
function first() {   console.log('first'); } function second() {   console.log('second'); } function third() {   console.log('third'); } first(); settimeout(second, 1000); // invoke `second` after 1000ms third();
那个这下异步处理机制的原理是什么呢?这里就要引入我们的事件循环event loop了
event loop有一个简单的job(task) - 监视call stack和callback queue。如果调用堆栈为空,它将从队列中取出第一个事件,并将其推送到调用堆栈,从而有效地运行它。
这种迭代在事件循环中被称为tick。每个事件只是一个函数回调。
console.log('hi'); settimeout(function cb1() {    console.log('cb1'); }, 5000); console.log('bye');
执行这段代码
请注意,settimeout(...)不会自动将您的回调放在事件循环队列中。
它设置了一个计时器。当计时器到期时,浏览器将你的回调放到事件循环中,以便将来的一些tick会执行。但是,队列中可能还有其他事件已经被添加了 - 您的回调将不会立即执行。
有很多关于开始使用javascript中的异步代码的文章和教程,建议您使用settimeout(callback,0)。
现在你知道event loop是怎么做的,以及settimeout是如何工作的。
你就能更好的理解下面的代码
console.log('hi'); settimeout(function() {   console.log('callback'); }, 0); console.log('bye');
尽管等待时间设置为0 ms,但浏览器控制台中的结果如下所示:
hi
bye
callback
相信看了本文案例你已经掌握了方法,更多精彩请关注其它相关文章!
推荐阅读:
vue中slot与slot-scope使用步奏详解
百度地图去掉marker覆盖物的方法
以上就是js里eventloop的使用详解的详细内容。
该用户其它信息

VIP推荐

免费发布信息,免费发布B2B信息网站平台 - 三六零分类信息网 沪ICP备09012988号-2
企业名录 Product