You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
<script>
//模拟一段ajax请求
function ajax(content) {console.log('ajax request '+content)}
function debounce(fun, delay) {returnfunction(args){letthat=thisclearTimeout(fun.id)fun.id=setTimeout(function(){fun.call(that,args)},delay)}}
let inputb = document.getElementById('debounce')
let debounceAjax = debounce(ajax, 500)
inputb.addEventListener('keyup', function (e) {debounceAjax(e.target.value)})
</script>
节流与防抖
节流:一段时间内,只能触发一次函数。
防抖:某段时间内,不管函数触发多少次,我只生效最后一次。(触发函数时,时间重置)
测试
不使用节流防抖
在我们滚动页面时,大量触发滚动事件。
节流
以下代码修改来自前端性能优化原理与实践。
通过闭包来记录上一次执行的时间。如果2次触发的时间间隔小于你的设定值,则不触发。
可以看到使用了节流,触发函数的次数明显减少。
防抖
以下代码来自7分钟理解JS的节流、防抖及使用场景
可以看到,当我停下输入一段时间后才执行函数。
节流结合图片懒加载
参考
7分钟理解JS的节流、防抖及使用场景
掘金小册前端性能优化原理与实践
The text was updated successfully, but these errors were encountered: