防抖和节流本质上是优化高频率执行代码的手段。浏览器上的resize、scroll、keypress、mousemove等事件在触发时,会不断地调用绑定在事件上的回调函数,极大地浪费资源,降低应用性能,为了优化体验,需要对这类事件进行调用次数的限制,就可以采用防抖debounce和节流throttle的方式来减少调用频率。
防抖是在一段时间后再执行操作,若在一段时间内被重复触发,则重新计时。
节流是在一段时间内只运行一次,若在一段时间内重复触发,只有一次生效。
防抖和节流都可以通过使用setTimeout实现,目的都是,降低回调执行频率,节省计算资源。函数防抖,在一段连续操作结束后,处理回调,利用clearTimeout和 setTimeout实现。函数节流,在一段连续操作中,每一段时间只执行一次,频率较高的事件中使用来提高性能;函数防抖关注一定时间连续触发的事件,只在最后执行一次,而函数节流一段时间内只执行一次。
1.回流
当增加或删除dom节点,或者给元素修改宽高时,会改变页面布局,那么就会重新构造dom树然 后再次进行渲染,这就是回流。
2.重绘
简单来说就是重新绘画,当给一个元素更换颜色、更换背景,虽然不会影响页面布局,但是颜色或背 景变了,就会重新渲染页面,这就是重绘。
总结
重绘不会引起dom结构和页面布局的变化,只是样式的变化,有重绘不一定有回流。
回流则是会引起dom结构和页面布局的变化,有回流就一定有重绘。
一、内存溢出 (OutOfMemory)
它是指程序在申请内存时,没有足够的内存空间供其使用,抛出OutOfMemory异常。
比如申请了一个8MB空间,但是当前内存可用空间只有5MB,那么就是内存溢出;
即:OutOfMemoryError,是指没有空闲内存,垃圾收集器回收后也不能提供更多的内存空间;
二、内存泄漏 (Memory Leak)
它是指程序运行后,没有释放所占用的内存空间(程序中有引用没有释放,不能被GC回收),一次内存泄漏可能不会有很大的影响,但长时间的内存泄漏,堆积到一定程度就会产生内存溢出。