0

非常に単純な jQuery プラグインのボイラープレートを取り上げます。

var _defaults = {
  foo: false
};

function Plugin( settings ) {
  this.opts = $.extend( {}, _defaults, settings );
}

オプションが に設定されているdoSomething場合にのみ正常に実行できるメソッドがあり、特定の時点で他のメソッドが実行される可能性があるため、ステートメントをどこに配置するかについてジレンマがありました。最初に私は考えました:footruedoSomething()if

Plugin.prototype = {
  doSomething: function() {
    // Do something that depends on foo
  },
  method: function() {
    ...
    if ( this.opts.foo ) { this.doSomething() }
  },
  method: function() {
    ...
    if ( this.opts.foo ) { this.doSomething() }
  }
};

しかし、その後、乾燥のために私はこれを行うことにしました:

Plugin.prototype = {
  doSomething: function() {
    if ( this.opts.foo ) {
      // Do something that depends on foo
    }
  },
  method: function() {
    ...
    this.doSomething();
  },
  method: function() {
    ...
    this.doSomething();
  }
};

そのため、 isdoSomethingの場合、空であっても関数を実行するメソッドを利用できるようになりました。foofalse

だから私の質問は、より良いアプローチは何ですか? 2 つ目は短いですが、空の関数を実行する必要がない場合でも、毎回メソッドをルックアップする必要があります。最初のものはより効率的ですか?

ああ、そうです、おそらくこれはマイクロ最適化であり、心配する必要はないと人々は言うでしょうが、私はただ興味があります...

4

1 に答える 1

0

関数の呼び出しは、最初のアプローチよりも非効率的です。

ここでテストを見てください: http://geek.michaelgrace.org/2011/02/javascript-performance-hit-calling-function-vs-inline/

彼らは、関数呼び出しが一部のブラウザーで最大 50% 遅くなる可能性があることを確認しています。自分でテストできます。

于 2012-10-30T08:50:01.560 に答える