JS是一门单线程的语言,这是因为它运行在浏览器的渲染主线程中,而渲染主线程只有一个。而渲染主线程承担着诸多的工作,渲染页面、执行 JS 都在其中运行。如果使用同步的方式,就极有可能导致主线程产生阻塞,从而导致消息队列中的很多其他任务无法得到执行。这样一来,一方面会导致繁忙的主线程白白的消耗时间,另一方面导致页面无法及时更新,给用户造成卡死现象。所以浏览器采用异步的方式来避免。具体做法是当某些任务发生时,比如计时器、网络、事件监听,主线程将任务交给其他线程去处理,自身立即结束任务的执行,转而执行后续代码。当其他线程完成时,将事先传递的回调函数包装成任务,加入到消息队列的末尾排队,等待主线程调度执行。在这种异步模式下,浏览器永不阻塞,从而最大限度的保证了单线程的流畅运行。
相关推荐
2601_9669496513 分钟前
如何根据研究的起止时间截取分钟级行情?Python 实战与 QuantDash 数据处理指南晨曦中的暮雨2 小时前
限流算法——固定窗口、滑动窗口、漏桶、令牌桶itmigrate2 小时前
前端项目里,Object.is 并不是 === 的平替喵了几个咪3 小时前
GoWind CMS 拆解:在 Go 里给 TipTap 搭一套 Yjs 协同后端程序员清风3 小时前
数据处理脚本工程化:日志、配置、命令行与测试小大宇4 小时前
Vue知识点6-computed计算属性程序员海军4 小时前
尤雨溪 : Vue 4 已经在规划中了!2601_949970694 小时前
HumanizeDuration 跨端三方库仓颉适配全流程2601_962885725 小时前
如何用 Python 把 K 线重采样成任意周期?Wang's Blog5 小时前
Java 项目实战: 交友项目 - 圈子功能实现:总结