js异步编程简介

182 阅读2分钟

异步编程

对于单线程语言,如果没有异步编程,那么程序将会被卡死。

(当然如果是多线程,这种情况会少很多)

而使用异步编程,有一个大的突破就是 携程

对于js那么实现方式有哪些呢???

回调函数

将一个函数做为参数传递给另外一个函数,那么作为参数的这个就叫做回调函数,

同步回调

同步回调就是作为参数的函数执行完之后,调用的函数才返回,

异步回调

异步回调就是调用的函数已经返回执行完毕了,而作为参数的回调函数才开始返回。

ajax

ajax是js异步编程中最重要的探索

说到底他还是一个js里包含的技术

不刷新页面的情况下请求数据

请求的数据以字符串的形式进行传输

事件监听

事件监听也是一个最重要的异步方法。

Promise

Generator/yield

async/await

防抖(防止抖动)

防抖就是频繁触发的函数,只会执行最后一次

防抖一般用于输入框,还有模糊查询之中

防抖主要是通过定时器来实现的。

全局开启一个定时器,将要最终实现的逻辑放入定时器,。。然后每输入一个字符,先让他不做最终要做的事,只是清除上一个定时器,并在多少秒之后执行,

每敲一个新的字符,都会重新执行,一直清除定时器,所以一直不发请求,等到没有变化之后,没有再次输入之后,定时器到了,发送请求。

节流

频繁触发的函数,在一段时间内只执行一次,事件触发很密集,但是事件却只能在某一个时间里边执行一次。

在第一次触发这个事件时,函数会立即执行,开一个定时器,第二次触发的时候如果定时器还在,就返回结束执行,等这个定时器执行完的时候,执行下一次事件。

一般用于页面的上拉,下拉,滑动,鼠标的移动等等。

function throttle(func, wait) {     var pending = false;        return function () {                if(pending) { return; }               var args = arguments;                   var context = this;                pending = true;               setTimeout(() => {                        func.apply(context, args);                       pending = false;        }, wait);     }}

柯里化

将接收多个参数的函数变为只接受一个单一的参数的函数,并返回接收余下参数的函数和返回结果的新函数

应用场景:延迟计算,参数复用,动态生成函数

分时函数

分时函数就是将一个特别庞大的数字,比如1000个结点,(一次插入到DOM中会有很大的渲染开销,)按照每隔一段时间去创建几个,最终创建出所有的node,这样不至于让浏览器假死。