Безопасно ли хранить экземпляр Coldfusion CFC в области REQUEST?

Безопасно ли хранить объект CFC в области REQUEST для последующего доступа? В настоящее время наши сайты загружают навигационные данные как минимум дважды, а возможно, и трижды, если они используют нашу функцию навигации. Иногда эти данные могут различаться, однако в большинстве случаев для получения одних и тех же точных навигационных данных выполняются три отдельных вызова...

Итак, я подумал после первой загрузки сохранить навигационные данные в области REQUEST в какой-то структуре, а при последующих вызовах просто проверить, есть ли уже эти данные, и если да, то просто использовать то, что хранится, а не чем воссоздавать его снова. Я знаю, что это будет доступ к общей области вне содержащегося объекта, что, вероятно, не является хорошей практикой, но в конце концов может сократить время загрузки нашей страницы вдвое...

Я знаю, что это можно сделать, однако недавно у нас были проблемы с сервером, некоторые из которых, возможно, были утечками памяти из-за того, как мы используем/храним определенные вещи, поэтому мне было интересно, безопасно ли это делать...


person jzimmerman2011    schedule 18.04.2012    source источник
comment
Неясно, хотите ли вы сохранять информацию при нескольких загрузках страниц, однако я бы посмотрел на область сеанса для такого типа кэширования, если это для каждого пользователя, или на приложение, если оно для каждого приложения. Прочитайте этот ответ: stackoverflow.com/questions/25672/   -  person Simon at My School Portal    schedule 18.04.2012
comment
сохранение в сеансе или другой постоянной области нам не подойдет; я уже пробовал. я рассматривал только ЗАПРОС, поскольку я предполагаю, что он полностью отбрасывается после завершения запроса, но даже кэширование этих данных для каждого запроса, вероятно, может сэкономить как минимум 1/2 времени загрузки нашей страницы, поскольку нам не нужно загружать те же данные. несколько раз за запрос.   -  person jzimmerman2011    schedule 18.04.2012
comment
Хорошо, если это только для одного запроса, как насчет области действия переменных в вызываемом шаблоне (шаблонах)? Раньше пользовался подобным. Должна ли эта переменная быть доступна внутри функций?   -  person Simon at My School Portal    schedule 18.04.2012
comment
да, он должен быть доступен в функциях и CFC (я знаю, что это не очень хорошая практика, но сейчас меня больше беспокоит производительность, поскольку в последнее время это было проблемой).   -  person jzimmerman2011    schedule 18.04.2012


Ответы (2)


Для вашей цели подойдет область variables или request, однако более целесообразным было бы изменить функции, которым требуется доступ к этой переменной, чтобы она принимала вашу кешированную переменную в качестве аргумента. Что касается CFC, его можно передать в методе init() и сохранить для использования методами внутри этого CFC (при условии, что вы его инициализируете)

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

Как упоминалось в моих комментариях ранее, ColdFusion — когда использовать область запроса? стоит быстро прочитать, так как в ответах есть соответствующая информация.

person Simon at My School Portal    schedule 18.04.2012
comment
да, я знаю, что это нехорошая практика, но то, как все устроено в настоящее время, я не думаю, что было бы хорошей идеей пересматривать сигнатуры этих методов CFC... наше намерение состоит в том, чтобы в основном отказаться от нашей текущей кодовой базы и начать с нуля, где эти соображения дизайна будут учтены до написания кода и его использования. прямо сейчас, однако, мы смотрим на небольшие изменения, которые мы можем сделать, чтобы задержать нас, пока мы не сможем разработать этот новый продукт. - person jzimmerman2011; 18.04.2012
comment
Тогда, как было сказано, variables или request будут подходящими и достаточно безопасными. Если вы хотите убедиться, что они уничтожены, просто сделайте StructDelete(request,'yourVariableName'); в конце скрипта. - person Simon at My School Portal; 18.04.2012

да. Единственным запросом, который имеет доступ к области REQUEST, является текущий запрос.

person Dan Roberts    schedule 18.04.2012