‘throttle’

Throttling function calls銆愯瘧鏂囥

鏄熸湡涓, 7鏈 21st, 2010

鍦╰witter涓婄湅鍒颁竴绡囨瘮杈冨ソ鐨勬帹鑽愭枃绔狅紝鑷冲皯鎴戞劅瑙夊張瀛﹀埌浜嗕笢瑗匡紝鐗瑰埆鎷垮嚭鏉ョ炕璇戝拰鍒嗕韩涓涓嬨

鍘熸枃鍦板潃锛http://javascript.feederss.com/post/2442.html

濡傛灉浣犲仛杩囩敤鎴锋枃鏈鎻愪氦纭鐨勫姛鑳斤紝姣斿鐢ㄥ埌浜唎nkeypress锛岄偅涔堜綘鏄惁鎯宠繃瑕佸噺灏戜綘鐨勬娴嬪嚱鏁扮殑鎵ц娆℃暟锛熶妇涓渶绠鍗曠殑渚嬪瓙锛屾瘮濡備綘瑕佺‘璁や竴涓敤鎴峰悕鏄惁瀛樺湪锛岄偅涔堜綘鍙兘骞朵笉鎯虫瘡娆eypress閮芥墽琛宎jax寮傛妫娴嬶紝鍥犱负澶у鏁扮殑鏃跺欒緭鍏ヤ竴涓崟璇嶉渶瑕10鍒嗕箣涓绉掓垨鑰呮洿涔咃紝閭d箞浣犲氨闇瑕佹帶鍒朵綘鐨刟jax璇锋眰鐨勯棿闅旓紝鑰屼笉鏄瘡娆ress涔嬪悗閮界珛鍒诲幓杩涜ajax璇锋眰锛岃嚦灏戣鍦ㄩ偅10浠戒箣涓绉掗挓璁╀綘鐨勬枃鏈澶勪簬浼戠湢鐘舵併

鎵浠ュ氨浼氫骇鐢熻繖涔堜竴涓濂囩殑绫讳技closure鐨勪竴绉峧avascript鏂规锛屼笅闈㈡槸鍒涘缓杩欎釜鏂规硶鐨勪竴涓畝鍗曠殑渚嬪瓙锛

function throttle(fn, delay) {var timer = null;return function () {
聽 聽 var context = this, args = arguments;
聽 聽 clearTimeout(timer);
聽 聽 timer = setTimeout(function () {
聽 聽 聽 fn.apply(context, args);
聽 聽 }, delay);};
}

濡傛灉浣犳槸鍦ㄧ敤jquery鏉ュ伐浣滅殑璇濓紝濡傛灉浣犺鍐欎竴涓猭eypress鐨勬娴嬶紝浣犲彲浠ュ儚涓嬮潰杩欐牱浣跨敤锛

$('input.username').keypress(throttle(function (event) {// do the Ajax request
}, 250));

杩欓噷鐨勫叧閿瘝鏄痶his鍜岄偅涓猘rgs锛宼his鍏跺疄灏辨槸浣犻鏈熺殑閭d釜input锛岃宎rgs鏄紶鍏ョ殑event瀵硅薄锛岄氳繃杩欎釜鏂规硶浣犲氨鍙互鍑嗙‘鐨勬帶鍒朵綘鐨刟jax璇锋眰鏄痯ress涓娆$殑涔嬪悗250姣杩囧悗鍐嶆瑙﹀彂浜嗐

澶ф灏辨槸杩欎箞涓绡囨枃绔狅紝浣嗘槸鎴戞壙璁や互鍓嶇‘瀹炴病鏈夋敞鎰忓埌杩囷紝鍏充簬閭d釜throttle鍑芥暟锛屾垜鍦╢irebug閲屾娴嬩簡涓嬶紝閲岄潰鏈涓嶆槑鐧界殑鍏跺疄灏辨槸閭d釜this鍜宎rgs銆傞氳繃鏂偣鎴戞娴嬪嚭鏉ヤ簡锛岃櫧鐒朵粬鏂囩珷鏈鍚庝篃鍛婅瘔浜嗐

鎭╋紝鏈鍚庡鏋滀綘涓嶇敤jquery鐨勮瘽锛屽師濮嬬殑js濡備綍浣跨敤杩欎釜鍑芥暟鍛紵

document.getElementById(‘page’).onclick=throttle(function(e){
alert(e);
alert(‘3000 later’);
},3000)

鎭┿傘傘傚氨鏄繖涔堢畝鍗曗︹_^

瀵逛簡 杩欎釜鏂囩珷鐨勪綔鑰呮尯NB鐨勶紝鎴戜篃鎺ㄨ崘璁㈤槄浠栫殑tw鍜宺ss鈥︹