Подтвердить что ты не робот

ColdFusion: более эффективный structKeyExists() вместо isDefined()

Какая из них более эффективна в ColdFusion?

isDefined('url.myvar')

или

structKeyExists(url, 'myvar')
4b9b3361

Ответ 1

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

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

  • Локальные (только локальные функции, UDF и CFC)
  • Аргументы
  • Поток локальный (только внутри потоков)
  • Запрос (не истинная область применения, применяется для переменных в циклах запросов)
  • Тема
  • Переменные
  • CGI
  • CFFile
  • URL
  • Форма
  • Cookie
  • Клиент

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

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

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

Ответ 2

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

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

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