陈晨,微医云服务团队前端工程师,一位“生命在于静止”的程序员。
异步的由来JavaScript是单线程语言,浏览器只分配了一个主线程执行任务,意味着如果有多个任务,则必须按照顺序执行,前一个任务执行完成之后才能继续下一个任务。
这个模式比较清晰,但是当任务耗时较长的时候,比如网络请求,定时器和事件监听等,这个时候后续任务继续等待,效率比较低。我们常见的页面无响应,有时候就是因为任务耗时长或者无限循环等造成的。那现在是怎么解决这个问题呢。。。。
首先维护了一个“任务队列”。JavaScript虽然是单线程的,但运行的宿主环境(浏览器)是多线程的,浏览器为这些耗时任务开辟了另外的线程,主要包括