javaScript 是单线程执行的语言,它的执行机制是基于事件循环模型的。当 JavaScript 执行代码时,如果遇到阻塞(如执行时间较长的代码、同步的网络请求、计算密集型操作等),则会阻塞 JavaScript 引擎的执行,直到阻塞的操作完成才能继续执行下面的代码。
由于渲染页面也是由 JavaScript 引擎执行的,因此当 JavaScript 执行阻塞操作时,会阻塞渲染进程的执行,导致页面出现卡顿、失去响应等现象,影响用户体验。
例如,在 JavaScript 中执行一个循环,如果循环次数较多,会导致 JavaScript 引擎长时间占用 CPU,阻塞其他代码的执行,包括渲染进程的执行,从而导致页面出现卡顿现象。
JavaScript 中的异步指的是在执行代码时,某些操作会被推迟到后面再执行。与同步代码不同,异步代码不会阻塞程序的执行。当异步操作完成后,它会通知 JavaScript 引擎并将结果传递给处理函数进行处理。
JavaScript 中常见的异步操作包括:
定时器:使用 setTimeout 或 setInterval 函数设置定时器,在指定的时间后执行回调函数。
网络请求:使用 XMLHttpRequest 或 fetch 函数发起网络请求,请求完成后触发回调函数处理返回结果。
事件处理:在 DOM 元素上注册事件处理函数,当事件发生时触发回调函数。
Promise:使用 Promise 封装异步操作,通过 then 方法链式调用多个异步操作,处理操作结果。
async/await:使用 async 和 await 关键字简化 Promise 的使用,以同步的方式编写异步代码。
在 JavaScript 中,异步操作通常使用回调函数、Promise、async/await 等机制来处理操作完成后的结果。异步编程可以帮助提高程序的性能和响应性,避免程序的阻塞和卡顿现象,常用于处理网络请求、I/O 操作、定时器、事件处理等场景。