您好,欢迎访问一九零五行业门户网

关于如何优化jQuery的实例详解

在最近的一个jquery插件中,我使用到了jquery中的resize()方法来检测用户调整浏览器窗口并运行相关代码。
我注意到resize window时各个浏览器的性能消耗不一。
ie、safari、chrome在调整窗口变化中一直在执行resize事件
opera则在这个过程中发生了很多次resize事件,但在结束调整时执行。
firefox则是只在调整结束后才执行事件。
而我们想要的明显是在结束调整之后才执行事件。幸运的是我们可以通过以下几种方法来调整。
jquery惰性插件jquery throttle / debounce: sometimes, less is more!
(function(b,c){var $=b.jquery||b.cowboy||(b.cowboy={}),a;$.throttle=a=function(e,f,j,i){var h,d=0;if(typeof f!==boolean){i=j;j=f;f=c}function g(){var o=this,m=+new date()-d,n=arguments;function l(){d=+new date();j.apply(o,n)}function k(){h=c}if(i&&!h){l()}h&&cleartimeout(h);if(i===c&&m>e){l()}else{if(f!==true){h=settimeout(i?k:l,i===c?e-m:e)}}}if($.guid){g.guid=j.guid=j.guid||$.guid++}return g};$.debounce=function(d,e,f){return f===c?a(d,e,false):a(d,f,e!==false)}})(this);
使用方法:
function log( event ) {   console.log( $(window).scrolltop(), event.timestamp ); }; // console logging happens on window scroll, waaay more often // than you want it to. $(window).scroll( log ); // console logging happens on window scroll, but no more than // once every 250ms. $(window).scroll( $.throttle( 250, log ) ); // note that in jquery 1.4+ you can unbind by reference using // either the throttled function, or the original function. $(window).unbind( 'scroll', log );
js代码(function($,sr){ // debouncing function from john hann // http://unscriptable.com/index.php/2009/03/20/debouncing-javascript-methods/ var debounce = function (func, threshold, execasap) { var timeout; return function debounced () { var obj = this, args = arguments; function delayed () { if (!execasap) func.apply(obj, args); timeout = null; }; if (timeout) cleartimeout(timeout); else if (execasap) func.apply(obj, args); timeout = settimeout(delayed, threshold || 100); }; } // smartresize jquery.fn[sr] = function(fn){ return fn ? this.bind('resize', debounce(fn)) : this.trigger(sr); }; })(jquery,'smartresize'); // usage: $(window).smartresize(function(){ // code that takes it easy... });
总结起来第一种简单容易理解,第二种则是比较全面,代码也少,第三种也差不多。
javascript-resize-performance/第二种:benalman.com/projects/jquery-throttle-debounce-plugin/
第三种:www.paulirish.com/2009/throttled-smartresize-jquery-event-handler/
javascript代码:unscriptable.com/2009/03/20/debouncing-javascript-methods/
以后对于滚动、调整窗体大小等最好使用这种方法来减少javascript执行的次数。慎记。
以上就是关于如何优化jquery的实例详解的详细内容。
其它类似信息

推荐信息