2011-11-07 6 views
0

のサイズを変更するスピードアップ:は、ウィンドウが、私は次のようないくつかのスクリプトを持っている機能のパフォーマンス

var breakpoints = [0,240,480,960,9999], 
    bpCount = breakpoints.length, 
    windowsize = 0; 

window.onresize = function() { 

    windowsize = document.body.clientWidth; 

    for(var i=0; i<bpCount; i++) { 
     if(windowsize >= breakpoints[i] && windowsize < breakpoints[i+1]) { 
      doSomething(breakpoints[i]); 
      break; 
     } 
    }  

}; 

しかし、これはまともなPC上でもChromeで、かなりゆっくり実行しているようだ、と 'doSomethingのは、ただ実行している場合でも、 'console.log'なので、画面サイズがサイズ変更の際に2つの値の間にあるかどうかを調べる良い方法があるかどうかは疑問でした。

おかげ

+0

たとえば、アンダースコアライブラリを使用するなど、少しの機能制限/デバウンスが役立つことがあります:http://documentcloud.github.com/underscore/#throttle – biziclop

+0

各範囲で 'doSomething()'を1回だけしたいですか? – SLaks

答えて

6

はサイズ毎回をポーリングしないでください。あまりにも多くのコンピューティングパワーを使用しています。

代わりに、タイマーを作成し、(10 msが速すぎるかもしれません)しょっちゅうサイズのチェック:

var checkWindowSizeTimer; 

function checkWindowSize() { 
    var windowsize = document.body.clientWidth; 

    if (windowsize >= breakpoints[i] && windowsize < breakpoints[i+1]) { 
     doSomething(breakpoints[i]); 
     clearInterval(checkWindowSizeTimer); 
    } 
} 

window.onresize = function() { 
    checkWindowSizeTimer = setInterval(checkWindowSize, 10); 
} 

窓があなたのバウンド、タイマー終了を過ぎてサイズが変更された場合。

+0

機能を遅らせることは効果をさらに遅くしませんか?私は基本的にちょうど特定の数字が入っている範囲を調べる簡単な方法があるのだろうかと疑問に思っています。 – rwacarter

+0

あなたのやりたいことを遅くしますが、あなたの方法よりはるかに少ないです。ユーザーはマウスを速やかに移動させて通知することはありません。 – Blender

関連する問題