For investors
股价:
5.36 美元 %For investors
股价:
5.36 美元 %认真做教育 专心促就业
异步编程开发是程序员在学习JavaScript编程的时候需要重点掌握的一个编程技术,下面我们就通过案例分析来了解一下,JavaScript异步编程都有哪些方法。
1、什么是异步
异步(async)是相对于同步(sync)而言的,很好理解。
同步就是一件事一件事的执行。只有前一个任务执行完毕,才能执行后一个任务。而异步是不用等待前一个任务执行完成也能够执行。
2、为啥要在JS中使用异步
由于javascript是单线程的,只能在JS引擎的主线程上运行的,所以js代码只能一行一行的执行,不能在同一时间执行多个js代码任务,这就导致如果有一段耗时较长的计算,或者是一个ajax请求等IO操作,如果没有异步的存在,就会出现用户长时间等待,并且由于当前任务还未完成,所以这时候所有的其他操作都会无响应。
3、那为啥JS不设计成多线程的
这主要跟javascript的历史有关,js开始只是为了处理一些表单验证和DOM操作而被创造出来的,所以主要为了语言的轻量和简单采用了单线程的模式。多线程模型相比单线程要复杂很多,比如多线程需要处理线程间资源的共享问题,还要解决状态同步等问题。
如果JS是多线程的话,当你要执行往div中插入一个DOM的操作的同时,另一个线程执行了删除这个div的操作,这个时候就会出现很多问题,我们还需要为此增加锁机制等。
好,那么现在我们知道了单线程的JS为了不出现长时间等待的状况,会使用异步来处理。比如当执行一个ajax操作的时候,当js发出请求后,不会傻了吧唧的在那里等着服务器数据返回,而是去继续执行后面的任务,等到服务器数据返回以后再通知js引擎去处理。
4、JS如何实现异步
当JS解析执行时,会被引擎分为两类任务,同步任务(synchronous)和异步任务(asynchronous)。
对于同步任务来说,会被推到执行栈按顺序去执行这些任务。
对于异步任务来说,当其可以被执行时,会被放到一个任务队列(taskqueue)里等待JS引擎去执行。
当执行栈中的所有同步任务完成后,JS引擎才会去任务队列里查看是否有任务存在,并将任务放到执行栈中去执行,执行完了又会去任务队列里查看是否有已经可以执行的任务。这种循环检查的机制,就叫做事件循环(EventLoop)。
对于任务队列,其实是有更细的分类。其被分为微任务(microtask)队列&宏任务(macrotask)队列
【免责声明】:本内容转载于网络,转载目的在于传递信息。文章内容为作者个人意见,本平台对文中陈述、观点保持中立,不对所包含内容的准确性、可靠性与完整性提供形式地保证。请读者仅作参考。更多内容请加danei0707学习了解。欢迎关注“达内在线”参与分销,赚更多好礼。