在开发中会遇到页面操错频率很高的事件或者连续的事件,如果不进行性能的优化,就会出现页面卡顿的现象
eg:
鼠标事件:mousemove/mouseover/mouseWheel...
键盘事件:keypress/keyput/keydown.........
为了解决这类问题,常用的方法就是 throttle 和debounce。 两者都是用来控制某个函数在一定时间内执行多少次的解决方案。
throttle: 预先设定一个执行周期,当调用动作的时刻大于等于执行周期则执行该动作,然后进入下一个新的时间周期
throttle假设你正在乘电梯上楼,当电梯门关闭之前发现有人也要乘电梯,礼貌起见,你会按下开门开关,然后等他进电梯;但是,你是个没耐心的人,你最多只会等待电梯停留一分钟;在这一分钟内,你会开门让别人进来,但是过了一分钟之后,你就会关门,让电梯上楼。
debounce:当调用动作触发一段事件后,才会执行该动作,若在这段时间间隔内又调用此动作则将重新计算时间间隔
debounce假设你正在乘电梯上楼,当电梯门关闭之前发现有人也要乘电梯,礼貌起见,你会按下开门开关,然后等他进电梯;如果在电梯门关闭之前,又有人来了,你会继续开门;这样一直进行下去,你可能需要等待几分钟,最终没人进电梯了,才会关闭电梯门,然后上楼。