22

これらのうち、ColdFusion でより効率的なのはどれですか?

isDefined('url.myvar')

また

structKeyExists(url, 'myvar')
4

2 に答える 2

41

最近 (CF8+) 速度の違いはそれほど大きくありません。ただし、structKeyExists実際には少し高速です。理由は次のとおりです。

を使用するisDefinedと、渡した文字列が複数のスコープでキー名として検索されます。CF9 の時点で、チェックされた順序でのスコープのリストは次のとおりです: ( source )

  1. ローカル (機能ローカル、UDF および CFC のみ)
  2. 引数
  3. スレッド ローカル (内側のスレッドのみ)
  4. クエリ (真のスコープではありません。クエリ ループ内の変数に適用されます)
  5. スレッド
  6. 変数
  7. CG
  8. CFファイル
  9. URL
  10. クッキー
  11. クライアント

スコープ名をisDefined(like:のようif isDefined('variables.foo')に) 使用しても、リストは順番にチェックされます。変数local.variables.fooが定義されている場合は、 BEFORE variables.fooが検出されます。

一方、structKeyExistsキー名の存在については、渡された構造のみを検索します。そのため、見なければならない場所がはるかに少なくなります。

私の意見では、より明示的なコード ( structKeyExists) を使用することで、パフォーマンスが向上するだけでなく、コードがより読みやすく、保守しやすくなります。

于 2010-10-18T03:33:10.757 に答える
12

読みやすく、何をしているかを最もよく表しているものを使用してください。

この 2 つの違いは信じられないほど小さく、心配する必要はほとんどありません。

遅さを実証する実証済み再現可能なテスト ケースがない限り、コードの最適化に時間を無駄にしないでください。

于 2010-10-18T11:20:53.423 に答える