防抖和节流
绑定一些事件,如resize鼠标移动等,持续触发,有时候不希望时间持续触发的过程中频繁去执行函数,如监听后执行的是DOM操作,这样频繁的去触发执行,可能会影响到浏览器的性能,甚至会导致浏览器卡顿
为什么频繁的操作DOM会影响浏览器的性能,甚至导致浏览器卡顿,
频繁的操作DOM会影响性能
DOM的操作的实现和ECMAScript的实现
IE里,ECMAScript的实现是在JScript.dll动态链接库中实现,DOM的实现是在mshtml.dll中,
DOM的操作最主要的原因:它会导致浏览器的重绘和重排,
重排一定会引起重绘,重绘不一定重排
页面初始化,浏览器窗口改变尺寸,元素改变位置,尺寸,内容,添加删除课件DOM元素都会导致重排,重排有些时候没法避免
优化方法,
- 将DOM操作积累起来进行批量操作
虚拟DOM会减少耗损
-
将DOM操作合并
-
文档碎片
-
防抖和节流
防抖:在一个动作发生的一定时间之后,才会执行特定的事件,一个需要频繁触发的函数,在规定的时间内,只让最后一次触发生效
节流:setTimeout,var _chat = this,throttle,一个函数执行一次后只有大于设定的执行周期后才会执行第二次,在一定的时间内限制一个动作只执行一次,定时器不清除会导致内存泄漏,内存泄漏堆积会导致内存溢出,浏览器崩掉或卡死