ColdFusion: более эффективная structKeyExists () вместо isDefined () - PullRequest
22 голосов
/ 18 октября 2010

Что из этого более эффективно в ColdFusion?

isDefined('url.myvar')

или

structKeyExists(url, 'myvar')

Ответы [ 2 ]

38 голосов
/ 18 октября 2010

В наши дни (CF8 +) разница в скорости не , что велико.Тем не менее, structKeyExists действительно немного быстрее.Вот почему.

Когда вы используете isDefined, строка, которую вы передаете, ищется как имя ключа в нескольких областях.Начиная с CF9, список областей в проверенном порядке: ( source )

  1. Local (только локальные функции, только UDF и CFC)
  2. Аргументы
  3. Локальный поток (только внутри потоков)
  4. Запрос (не истинная область, применяется к переменным внутри циклов запросов)
  5. Поток
  6. Переменные
  7. CGI
  8. CFFile
  9. URL
  10. Форма
  11. Cookie
  12. Клиент

Даже есливы используете имя области с isDefined (например: if isDefined('variables.foo')), список все равно будет проверяться по порядку;и если переменная local.variables.foo определена, она будет найдена ДО variables.foo.

С другой стороны, structKeyExists только ищет структуру, которую вы передаете ей, на наличиеимя ключа;таким образом, куда нужно будет искать куда меньше мест.

Используя более явный код (structKeyExists), вы не только получаете некоторую производительность, но и, на мой взгляд, ваш код более читабелен и удобен в обслуживании.

10 голосов
/ 18 октября 2010

Используйте тот, который легче читается и лучше всего показывает, что вы делаете.

Разница между ними невероятно мала и очень вероятнане стоит беспокоиться вообще.

Не тратьте время на оптимизацию кода, если у вас нет проверенных и повторяемых тестовых примеров , демонстрирующихмедлительность.

...