多数人认为异步就是 Promise、async/await,只是解决回调地狱的语法糖。
但JS 异步的底层根基,是单线程的生存妥协。
JS 主线程只能串行执行,一旦阻塞,页面就卡死。
浏览器把耗时操作(网络、定时器、IO)交给宿主线程后台处理,完成后丢进任务队列,等主线程空闲再执行——这就是异步。
事件循环,只是一套任务优先级调度规则:微任务插队、宏任务轮询,为了兼顾响应速度与执行效率。
常见误区:
- async/await 不创造多线程,依旧跑在主线程;
- 微任务更快,但过度使用会阻塞渲染,比宏任务更隐蔽。
落地极简原则:
长计算拆分、丢进宏任务;状态更新放微任务;永远不要在主线程做密集运算。
一句话总结:
异步不为提速,只为不阻塞交互。看懂调度,才算真正会写 JS。