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