helloiamkitty +

降低函数的触发频率

参考: http://davidwalsh.name/javascript-debounce-function/

debounce function(不知道如何翻译成中文),它限制了一个函数被触发的频率。一个简单的例子,你监听了window的resize事件,当window的size发生变化时执行一个函数,函数对元素的位置做计算。该函数本身不重,但当resize时,它会执行成千上万次,容易造成浏览器卡死。于是,限制函数的执行频率就有了必要。

实现代码:

//如果immediate为true,则函数会在定时器启动前执行
function debounce(func, wait, immediate) {
    var timeout;
    return function() {
        var context = this, args = arguments;
        var later = function() {
            timeout = null;
            if (!immediate) func.apply(context, args);
        };
        var callNow = immediate && !timeout;
        clearTimeout(timeout);
        timeout = setTimeout(later, wait);
        if (callNow) func.apply(context, args);
    };
};

调用示例:

var myEfficientFn = debounce(function() {
    // All the taxing stuff you do
}, 250);

window.addEventListener('resize', myEfficientFn);
点击查看评论

Blog

Read

Project