coldFusion:isDefined()の代わりにより効率的なstructKeyExists()
-
08-10-2019 - |
質問
これらのどれがコールドフュージョンにより効率的ですか?
isDefined('url.myvar')
また
structKeyExists(url, 'myvar')
解決
最近(CF8+)速度の違いはありません それ 素晴らしい。でも、 structKeyExists
確かに少し速いです。これがその理由です。
使用するとき isDefined
, 、あなたが渡す文字列は、いくつかのスコープのキー名として検索されます。 CF9の時点で、チェックされた注文のスコープのリストは次のとおりです。ソース)
- ローカル(ローカル、UDFSおよびCFCのみ)
- 議論
- スレッドローカル(スレッドのみ)
- クエリ(真のスコープではなく、クエリループ内の変数に適用されます)
- スレッド
- 変数
- CGI
- cffile
- URL
- 形
- クッキー
- クライアント
スコープ名を使用している場合でも isDefined
(お気に入り: if isDefined('variables.foo')
)リストは引き続き順番にチェックされます。変数の場合 local.variables.foo
定義されていると、見つかります 前 variables.foo
.
一方で、 structKeyExists
キー名の存在のためにそれを渡す構造のみを検索します。そのため、見なければならない場所ははるかに少ないです。
より明示的なコードを使用することにより(structKeyExists
)、私の意見では、パフォーマンスを得ているだけでなく、コードがより読みやすく保守可能です。
他のヒント
あるものを使用します 読みやすい そして、あなたがしていることを最もよく示しています。
2つの違いはです 信じられないほど 小さく、まったく心配する価値がない可能性があります。
あなたが持っていない限り、コードを最適化する時間を無駄にしないでください 証明されています と 繰り返し可能 テストケース これは遅さを示しています。
所属していません StackOverflow