问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

把lua 和 event loop 结合起来,是不是比 js 更给力

发布网友 发布时间:2022-05-15 05:14

我来回答

2个回答

懂视网 时间:2022-05-15 09:35

这次给大家带来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

相信看了本文案例你已经掌握了方法,更多精彩请关注Gxl网其它相关文章!

推荐阅读:

vue中slot与slot-scope使用步奏详解

百度地图去掉marker覆盖物的方法

热心网友 时间:2022-05-15 06:43

Event Loop 是一个很重要的概念,指的是计算机系统的一种运行机制。 JavaScript语言就采用这种机制,来解决单线程运行带来的一些问题。 Event Loop 本文参考C. Aaron Cois的《Understanding The Node.js Event Loop》,解释什么是Event Loop
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
手机玻璃硬度是多少合适 ips屏幕硬度怎么样 手机硬度是什么意思? 2024年拼多多春节发货时间规定是什么?过年还要48小时发货吗? e元素e8100无线鼠标怎么使用 E元素X-8100靠谱吗?可以用几年? E元素X-8100现在有几种配色,哪一种配色好呢? E元素X-8100用的是什么色的轴,适合玩游戏吗? 浙c是哪个城市 浙c是哪里 榻榻米软包怎么安装 济南申融房地产开发有限公司怎么样? 如何解除QQ权限 请问济南比较大的房地产开发商有哪些 济南市景宏房地产开发有限公司怎么样? 济南赤道房地产开发有限公司怎么样? 济南长远房地产开发有限公司怎么样? 劳务派遣是什么意思劳 目前都有什么好的直播电商平台? 娱播如何附能各行各业? 在一个派遣期可以订立多个派遣协议吗? 娱播和其他电商直播平台比起来有哪一些优势?? 娱播是做什么的? 娱播是什么样的平台? 好干部标准包括以下哪些方面 好干部五个标准化是什么 今天把SIM卡剪得太小了……然后现在卡不能用了,想去补办。想问一下要不要带身份证什么的…… nova9sim卡小 请教,从大理古城哪里去机场比较方便 如何把(远程登录的)虚拟主机的文件下载到本地电脑上,有急用。谢谢! 如何将远程连接电脑上的文件下载到本地? 什么是实际封 济南房地产开发商有哪些 “侨批”实寄封是什么意思? 济南有哪几家房地产公司或项目管理公司比较好 济南信泰华城房地产开发有限公司怎么样? 个体铺面如何消毒? 集邮为什么要盖邮戳 疫情期间商铺消毒剂量怎么填? 济南市市中区房地产开发(集团)总公司怎么样? 什么是纪念封 济南万筑房地产开发有限公司怎么样? thorough,complete,entire,overall都有完全的意思,有什么区别? 梦见妈妈给商店消毒? 商店可以销售医用消毒剂吗? 西门子sr40的供电端子为什么标有AC110供电? 新买的西门子洗衣机显示40度的水温怎么脱水是凉的 西门子plc+1AG40与1BG40有什么区别 西门子sr40与cr40有什么区别 商店进购200箱84消毒液,已经卖出108箱,剩下四天卖完,平均每天卖多少? 西门子5su93 461cn40故障怎么处理?