2

現在、スクリプトに必要なすべての要素が、次のようなグローバル オブジェクトにキャッシュされています。

var MainObject={
   $El1 : $('#element1'), 
   $El2 : $('#element2')
   };

メソッド内では、オブジェクトに直接アクセスできます。

method1:function(){
   MainObject.$El1 // DO SOMETHING WITH THIS ELEMENT
}, ...

それで、私は2つの質問があります。

ローカル変数が最も速いと読みました。私のメソッドをそのように書いたほうがいいでしょうか?

method1:function(){
    var $El1=MainObject.$El1; 
    $El1 // DO SOMETHING WITH THIS ELEMENT
}, ...

そしてそうならば...

これらの要素を参照するスクリプトに多数のメソッドがある場合(すぐにかなりの数の行になる可能性があります)、それらを要約する最良の方法は何でしょうか?

method1:function(){
   var $El1=MainObject.$El1,
       $El2=MainObject.$El1,
       $El3=MainObject.$El1,
       $El4=MainObject.$El1;

   $El1 // DO SOMETHING WITH THIS ELEMENT
},

method2:function(){
   var $El1=MainObject.$El1,
       $El2=MainObject.$El1,
       $El3=MainObject.$El1,
       $El4=MainObject.$El1;

   $El1 // DO SOMETHING WITH THIS ELEMENT
},

method3:function(){
   var $El1=MainObject.$El1,
       $El2=MainObject.$El1,
       $El3=MainObject.$El1,
       $El4=MainObject.$El1;

   $El1 // DO SOMETHING WITH THIS ELEMENT
},

ありがとう!

4

3 に答える 3

3

解決が必要な特定のメソッドに実際にパフォーマンスの問題があることを測定する前に、時期尚早の最適化のためのコードを追加することは、たとえあったとしても、めったに良い考えではありません。コード行が増えるだけで、書くのに時間がかかり、多くの場合、実際の問題は解決しません。

次に、パフォーマンスの問題に対処する必要がある場合は、慎重に測定して、メソッドのどの側面が実際に時間を取っているかを調べる必要があります。


はい、ローカル変数はグローバル変数よりも高速です (変数名を解決するために、グローバル スコープの前にローカル スコープが検索されます)。はい、複数の参照MainObject.$EL1は単一のローカル参照よりも遅くなります。


これが私の一般的な経験則です。メソッドで一度か二度のようなものを使用しているだけMainObject.$EL1の場合、それをローカル変数にキャッシュするメリットはほとんどありません。3 回以上使用している場合は、ローカルにキャッシュして、余分なルックアップをすべて防止することをお勧めします。私は通常、JavaScript と C++ で同じことを行います。

実際にパフォーマンスの問題があり、何かをより速くしたい場合、パフォーマンスの問題の主な原因は何かという最初の直感が正しいことはめったにありません。したがって、プロファイリングを行い、実際に最も時間がかかっているものを見つけることは非常に理にかなっています。次に、変更を行っているときに、変更の影響を測定して、コードを追加したときに実際に違いが生じていることを確認する方法が必要です。

于 2013-02-24T00:35:22.727 に答える
1

このgetElements()機能は不可能です

ローカル変数はスコープで終了します..スコープが終わると変数も消えます..

これらの優れた投稿JavaScript Variable ScopeおよびVariable Scopeを読む必要があります

于 2013-02-24T00:19:24.850 に答える
0

ローカル変数は高速ですが、それほどではありません。最初に値をローカル変数にコピーするのにかかる時間を補うために、関数内で変数に数回アクセスする必要があります。一度しか使わなければ、その時間を無駄にするだけです。

パフォーマンス テストは次のとおりです: http://jsperf.com/variables-vs-properties-2

オブジェクト内のプロパティの検索とローカル変数の使用に大きな違いがないことがわかるだけでなく、違いが顕著になるまでに何百万回もこれを行う必要があることもわかります。

于 2013-02-24T00:53:27.377 に答える