ColdFusion: более эффективный structKeyExists() вместо isDefined()
Какая из них более эффективна в ColdFusion?
isDefined('url.myvar')
или
structKeyExists(url, 'myvar')
Ответ 1
В эти дни (CF8 +) разница в скорости не так уж велика. Однако structKeyExists действительно немного быстрее. Вот почему.
Когда вы используете isDefined, строка, в которую вы проходите, выполняется поиск в качестве имени ключа в нескольких областях. Начиная с CF9, список областей в проверенном порядке: (источник)
Локальные (только локальные функции, UDF и CFC)
Аргументы
Поток локальный (только внутри потоков)
Запрос (не истинная область применения, применяется для переменных в циклах запросов)
Тема
Переменные
CGI
CFFile
URL
Форма
Cookie
Клиент
Даже если вы используете имя области с помощью isDefined (например: if isDefined('variables.foo')), список по-прежнему будет проверяться по порядку; и если определена переменная local.variables.foo, она будет найдена до variables.foo.
С другой стороны, structKeyExists выполняет поиск только структуры, которую вы передаете, для существования имени ключа; поэтому их гораздо меньше, чем нужно.
Используя более явный код (structKeyExists), вы не только получаете некоторую производительность, но и, по моему мнению, ваш код более читабельен и поддерживается.
Ответ 2
Используйте , который легче читать, и лучше всего показывает, что вы делаете.
Разница между ними невероятно мала и, скорее всего, не стоит беспокоиться вообще.
Не тратьте время на оптимизацию кода, если у вас нет проверенного и повторяемого тестового примера , который демонстрирует медленность.