ColdFusion: более эффективные structleyexists () вместо Isdefined ()
-
08-10-2019 - |
Вопрос
Что из них более эффективно в ColdFusion?
isDefined('url.myvar')
или
structKeyExists(url, 'myvar')
Решение
В эти дни (CF8 +) разница в скорости не это отличный. Однако, structKeyExists
действительно немного быстрее. Вот почему.
Когда вы используете isDefined
, строка, которую вы передаете, ищут как ключевое имя в нескольких областях. По состоянию на CF9, список областей наказания в заказах: (источник)
- Local (функционируйте только локальные, UDFS и CFCS)
- Аргументы
- Нить локальные (только внутри нити)
- Запрос (не настоящий объем, применяется для переменных в петлях запроса)
- Нить
- Переменные
- CGI.
- Каприз
- Урл
- Форма
- Печенье
- Клиент
Даже если вы используете название области с помощью isDefined
(подобно: if isDefined('variables.foo')
) список все еще будет проверен в порядке; и если переменная local.variables.foo
определяется, он будет найден ДО variables.foo
.
С другой стороны, structKeyExists
только ищет структуру, которую вы передаете его для существования ключевого имени; Так что есть гораздо меньше мест, которые нужно будет посмотреть.
Используя более явный код (structKeyExists
) Не только вы набираете некоторую производительность, но ваш код более читабелен и поддерживается, на мой взгляд.
Другие советы
Использовать тот, который легче читать И лучше всего показывает, что вы делаете.
Разница между ними невероятно Маленький, и очень, скорее всего, не стоит беспокоиться вообще.
Не тратьте время оптимизации времени, если у вас нет доказано а также повторяется прецедент который демонстрирует медлительность.