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

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

isDefined('url.myvar')

или же

structKeyExists(url, 'myvar')

2 ответа

Решение

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

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

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

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

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

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

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

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

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

Другие вопросы по тегам