异步编程
对于单线程语言,如果没有异步编程,那么程序将会被卡死。
(当然如果是多线程,这种情况会少很多)
而使用异步编程,有一个大的突破就是 携程
对于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,这样不至于让浏览器假死。