一、JavaScript是一门单线程的语言
单线程意味着JavaScript在同一个时间只能做一件事,如果在同个时间有多个任务的话,这些任务就需要进行排队依次执行,只有前一个任务执行完,下一个任务才会被执行。从代码块上看,执行过程是从上到下逐句执行的。
JavaScript作为浏览器的脚本语言,主要用来实现与用户的交互,利用JavaScript对DOM的各种各样的操作时,若采用多线程会导致复杂的同步问题,让程序陷入混乱,
二、单线程的Javascript为什么会有同步和异步
Javascript的任务依次执行,万一遇见一个文件读取或者请求服务器之类的任务,需要执行很长时间,就出现了交通阻塞,后面的代码排队无法执行,导致糟糕的用户体验。
为了解决这个问题,JavaScript在设计了异步机制,主线程将耗时长的任务挂起,先去执行后面的代码,等耗时长任务有结果了之后,再去执行。如此,Javascript就存在了同步任务和异步任务两种:
通常而言,页面渲染为同步,而资源加载可异步。
三、JavaScript中的异步是怎么实现的呢
JavaScript的异步机制包括以下几个步骤(1)所有同步任务都在主线程上执行,行成一个执行栈 ;(2)主线程之外,还存在一个任务队列,只要异步任务有了结果,就会在任务队列中放置一个事件 ;(3)一旦执行栈中的所有同步任务执行完毕,系统就会读取任务队列,看看里面还有哪些事件,那些对应的异步任务,于是结束等待状态,进入执行栈,开始执行~
四、如何通过异步编程提高性能
a、回调函数
b、 Promise