質問

これらのどれがコールドフュージョンにより効率的ですか?

isDefined('url.myvar')

また

structKeyExists(url, 'myvar')
役に立ちましたか?

解決

最近(CF8+)速度の違いはありません それ 素晴らしい。でも、 structKeyExists 確かに少し速いです。これがその理由です。

使用するとき isDefined, 、あなたが渡す文字列は、いくつかのスコープのキー名として検索されます。 CF9の時点で、チェックされた注文のスコープのリストは次のとおりです。ソース)

  1. ローカル(ローカル、UDFSおよびCFCのみ)
  2. 議論
  3. スレッドローカル(スレッドのみ)
  4. クエリ(真のスコープではなく、クエリループ内の変数に適用されます)
  5. スレッド
  6. 変数
  7. CGI
  8. cffile
  9. URL
  10. クッキー
  11. クライアント

スコープ名を使用している場合でも isDefined (お気に入り: if isDefined('variables.foo'))リストは引き続き順番にチェックされます。変数の場合 local.variables.foo 定義されていると、見つかります variables.foo.

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

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

他のヒント

あるものを使用します 読みやすい そして、あなたがしていることを最もよく示しています。

2つの違いはです 信じられないほど 小さく、まったく心配する価値がない可能性があります。

あなたが持っていない限り、コードを最適化する時間を無駄にしないでください 証明されています繰り返し可能 テストケース これは遅さを示しています。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top