0

SOにはおそらくこの質問の重複がありますが、私の質問に具体的に対処する質問はまだ見つかりません。

次のいずれかを含むWebアプリを構築しているとします。

  1. 約100個のプロパティを持つJSオブジェクト。そのうちの5個は、おそらく10個または15個のプロパティを持つサブオブジェクトであり、それぞれの約2/3は関数です。だから次のようなもの:

    Obj={
        x:y,
        y:z,
        obj1:{
          func:func(),
          num:1,
          func2:func2()
        },
        obj2:etc
    }
    
  2. または、100程度のプロパティを持つオブジェクトがまだ存在するが、関数を実行する他のオブジェクトがグローバル名前空間に存在するいくつかの異なるオブジェクトは、次のようになります。

    Obj={
        x:y,
        y:z,
        etc:andthensome
     }
    obj1={
        func:func(),
        num:1,
        func2:func2()
    }
    obj2={
       etc:'I am also a larger objects with functions'
    }
    

最初の方法は、グローバル名前空間をよりクリーンに保ちますが、より再帰的なプロパティと関数の検索を可能にし、thisまっすぐに保つことを少し混乱させる可能性があります。

2番目の方法は簡単に作成できますが、グローバル名前空間にオブジェクトを追加し、パフォーマンスが低下する可能性があります(これが問題の一種です)。

私の質問は、どちらかの方法を使用することに大きな利点がありますか?それとも両方とも「良い」、両方とも「悪い」ですか?

私は多くのことが開発者の好みに関係していることを知っているので、同様の質問をする別の方法-私が本当に知りたいことに近い:

多数の小さなオブジェクトを使用する場合、または多数のサブオブジェクトや関数などを含む1つまたは少数の大きなオブジェクトを使用する場合、パフォーマンスは向上しますか?

4

2 に答える 2

2

ルックアップが少ないほどパフォーマンスは高くなりますが、問題ではありません。

保守が容易になるようにコードを最適化し、パフォーマンスが問題になった場合にのみパフォーマンスについて心配する必要があります。

さらに重要なことに、パフォーマンスが問題になっている場合は、パフォーマンス分析ツールを使用してコードのボトルネックを見つけます。

よりグローバルな汚染に関しては、オブジェクトを明示的に必要としない限り、グローバル名前空間にオブジェクトを追加しないでください。汚染を回避するために、すべてのコードは即時呼び出し関数式(IIFE)に属します。

(function () {
    var obj = {
        foo: 'bar',
        ...
    };
}());
console.log(window.obj); //undefined, no accidental global pollution
于 2013-02-14T17:37:22.440 に答える
0

ルックアップでパフォーマンスに大きな影響はないはずです。コード構造はそれに関係ありません。これらの構造のいずれにもオブジェクトへの参照が含まれているだけであり、それらのオブジェクトのルックアップ時間は関係なく同じになります。

データに一致するようにオブジェクトを構造化し、コードを明確にする必要があります。オブジェクトが別のオブジェクトとは別の関心事である場合は、それをプロパティにしないでください。直接関連している場合は、他のオブジェクトのプロパティであることが理にかなっている場合があります。ここでは実際のパフォーマンスの問題はありません。これは、コードを構造化して、読みやすく、明確で、操作しやすいようにすることです。

于 2013-02-14T17:03:04.153 に答える