resize和scroll事件的优化,防止浏览器死掉
原理是利用setTimeout让resize事件和scroll事件在一定的时间内只执行一次,如下代码执行的话,浏览器会执行多次,甚至死掉:
(function(){window.onresize=function(){alert(0);}})()
只要用户改变窗口大小,会对内部一些元素大小重新计算,可能导致整个页面重新渲染,最终导致大量消耗 CPU。比如调用 resize 方法,用户改变窗口大小时会不停的被触发, 低版本的IE 会可能陷入假死状态。window的scroll事件也是如此,鼠标滚动或拖动滚动条,就会不停的触发scroll事件,如果处理的东西多,低版本的IE 也会陷入假死状态。
优化代码如下:
//解决方法var resizeTimer = null;window.onresize=function(){ if (resizeTimer) { clearTimeout(resizeTimer) } resizeTimer = setTimeout(function(){ alert(0); }, 400);}<!DOCTYPE HTML><html><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8"><title>resize和scroll事件的优化,防止浏览器死掉</title></head><body><script type="text/javascript">//执行这代码,浏览器会死掉,只要用户改变窗口大小,会对内部一些元素大小重新计算,可能导致整个页面重新渲染,最终导致大量消耗 CPU。比如调用 resize 方法,用户改变窗口大小时会不停的被触发, 低版本的IE 会可能陷入假死状态。window的scroll事件也是如此,鼠标滚动或拖动滚动条,就会不停的触发scroll事件,如果处理的东西多,低版本的IE也会陷入假死状态。/*(function(){window.onresize=function(){alert(0);}})()*///解决方法var resizeTimer = null;window.onresize=function(){ if (resizeTimer) { clearTimeout(resizeTimer) } resizeTimer = setTimeout(function(){ alert(0); }, 400);}</script></body></html>