5

過去4か月間、Webプロジェクトに取り組んでいます。コードのパフォーマンスを最適化するために、パターンを使用しました。私の疑問は、実際にパフォーマンスが向上するかどうかです。

オブジェクトを使用する必要があるときはいつthisでも、それをローカル変数に割り当てて使用します。

function someFunction()
{
  var thisObject = this;
  //use thisObject in all following the code. 
}

ここでの前提は、thisオブジェクトをローカル スタック変数に割り当てるとパフォーマンスが向上するということです。

このタイプのコーディングはどこにも見たことがないので、役に立たないかどうかは疑問です。

編集:このオブジェクトをローカル変数に割り当てることは、オブジェクトを保持するために行われることを知っていますが、それは私たちの場合ではありません。

4

3 に答える 3

7

これは Javascript では一般的な方法ですが、パフォーマンス上の理由から行われていません。this別の名前付きローカルでのオブジェクトの保存は、通常this、関数内で定義されているコールバック全体の値を保持するために行われます。

function someFunction() {
  var thisObject = this;
  var someCallback = function() {
    console.log(thisObject === this);  // Could print true or false
  };
  return someCallback;
}

thisObject === thistrue と評価されるかどうかは、呼び出し方によって異なります。

var o = {} 
o.someFunction = someFunction();
var callback = o.someFunction();
callback();        // prints false
callback.call(o);  // prints true
于 2012-04-16T14:40:08.423 に答える
2

すべてのパフォーマンスに関する質問と同様に、実際にパフォーマンスを測定して調べる必要があります。かなり単純なテスト ケース(実際のコードは多少異なる場合があります) では、ブラウザー間でさまざまな結果が得られます。

ここに画像の説明を入力

Chrome と Firefox は 2 つのテスト間で大きな違いはありませんが、わずかな違いは 2 つのテストの間で反対方向にあります。IE9 は、保存されたコピーを使用したテストを示していthisますself

Chrome と Firefox および IE9 で有意かつ一貫したパフォーマンスの差がなく、thisテスト ケースが大幅に高速であることを示していなければ、あなたが質問したデザイン パターンはブラウザー間で一貫したパフォーマンスの向上を実現していないと結論付けることができると思います。

私のコードでは、インライン イベント ハンドラー、コールバック、または他の何かに設定されているthisメソッド内の元のオブジェクトへの一貫した参照が必要な場合にのみ、コピーを別の変数に保存します。thisつまり、必要な場合にのみこのデザイン パターンを適用します。

SO でのこの設計パターンの以前の議論では、一部のライブラリは追加の最小化を可能にするためにこの設計パターンを使用すると結論付けthisられました。 1 文字の変数名に縮小されます。

于 2012-04-16T15:10:56.193 に答える
0

この種の最適化が (プラスの) 効果をもたらす場合でも、インタープリターに依存する可能性が非常に高くなります。

他のリリースでは、結果が元に戻る場合があります。

ただし、最終的には推測ではなく、測定する必要があります。

于 2012-04-16T14:43:19.840 に答える