JavaScript实现异步传输的原理是什么
导读:本文共1419字符,通常情况下阅读需要5分钟。同时您也可以点击右侧朗读,来听本文内容。按键盘←(左) →(右) 方向键可以翻页。
摘要: 一、浏览器在我们的开发中,在浏览器端中的JavaScript可以实现两个比较重要的接口,这两个接口分别是定时器和ajax请求定时器:对于定时器,当它被执行的时候,我们的浏览器会进行执行定时计数,而且在定时事件触发之后会把事件推到我们的JavaScript事件中,只有当JavaScript主线程同步完成之后才会到时间事件进行执行,所以JavaScript的定时器并... ...
目录
(为您整理了一些要点),点击可以直达。一、浏览器
在我们的开发中,在浏览器端中的JavaScript可以实现两个比较重要的接口,这两个接口分别是定时器和ajax请求
定时器:
对于定时器,当它被执行的时候,我们的浏览器会进行执行定时计数,而且在定时事件触发之后会把事件推到我们的JavaScript事件中,只有当JavaScript主线程同步完成之后才会到时间事件进行执行,所以JavaScript的定时器并不是准时触发的。
Ajax:
那么我们的Ajax请求和我们的定时器是一样的,他们同样是通过委托浏览器来进行执行任务,在Ajax中是由于浏览器中的http请求线程之后发起服务请求,在得到请求之后从而完成事件,然后再将回调函数推入到我们的事件队列中进行等待。
二、Node JS 端
对于Node JS的异步实现和浏览器实现是有所不同的,在Node JS 中的Libuv 为我们提供了很多能力,其中包含:跨平台、线程池、事件池、异步I/O 等等。不仅如此在Libuv中还为上一层的Node.js提供了统一的API调用,这就让我们在使用的时候不需要去考虑平台之间的差距,而且还可以做到隐藏了底层的实现,对于Libuv来说它本身就是异步和时间驱动的,所以当我们将I/O操作的请求传送给Libuv之后,就会开启线程来执行我们的I/O的调用,后面在传给我们的JavaScript从而进行最后的处理。
发起I/O调用:
1、我们在使用的使用是让用户通过Javascript代码调用NodeJS核心模块,将参数和回调传入核心模块。
2、 在NodeJS中我们需要通过 核心模块将传入参数和回调封装为一个请求对象。
3、 将这个请求对象推入到I/O线程池中等待执行 J。
4、avascript发起的异步调用结束,Javascript线程继续执行后续操作 。
执行回调:
1、异步任务完成之后,会将结果存放在请求对象的result属性上,并发出操作完成通知 。
2、每次事件循环时会检查I/O线程池中是否存在已经完成的I/O操作,如果有就将请求事件加入到I/O观察者队列当中(事件队列),之后当作事件处理 。
3、处理I/O观察者事件时,会将之前封装在请求对象中的回调函数取出,并将result参数传入执行,以完成Javascript回调的目的 。
JavaScript实现异步传输的原理是什么的详细内容,希望对您有所帮助,信息来源于网络。