Должен ли я использовать cfobject или cfinvoke для повторяющихся задач?
Мне нужно зациклить набор путей к изображениям, чтобы захватывать, изменять размер и сохранять изображения из внешних мест назначения на S3.
Я привык вызывать cfcs, чтобы сделать это так:
<cfinvoke component="form_img_handler" method="upload" returnvariable="imgSuccess">
<cfinvokeargument name="command" value="upload_search"/>
<cfinvokeargument name="imgPath" value="#results.bildpfad #"/>
<cfinvokeargument name="imgFile" value="#results.bilddateiname#"/>
<cfinvokeargument name="sellerILN" value="#results.iln#"/>
<cfinvokeargument name="cookie" value="#variables.screenWidth#"/>
</cfinvoke>
Вопрос:
Если я должен сделать это 25x, в цикле, было бы лучше использовать cfobject
вместо cfinvoke
? Из того, что я понимаю cfinvoke
получает экземпляр, выполняет свою работу и погибает. В то время как cfobjects
там, чтобы остаться. Если так, то было бы лучше в вышеупомянутом случае использовать cfobject
? Если так, то как бы я назвал мой upload
функция (передача параметров) и как мне удалить объект, когда я закончу?
(никогда раньше не использовал cfobject...)
Спасибо за помощь!
2 ответа
Также не используйте что-то вроде...
Внешний цикл (возможно, в глобальной области, например, Application):
<cfset form_img_hander = createObject('component','dotted.path.to.form_img_hander') />
or
<cfset form_img_hander = new dotted.path.to.form_img_hander() />
Внутри петли:
<cfset imgSuccess = form_img_handler.upload
( command = "upload_search"
, imgPath = results.bildpfad
, imgFile = results.bilddateiname
, sellerILN = results.iln
, cookie = variables.screenWidth
)/>
Потому что это гораздо более читабельно.
У вас нет проблем с производительностью, если только у вас нет повторяемого контрольного примера, который доказывает, что у вас есть проблемы с производительностью.
Что касается удаления объектов...
Если вы не размещаете объекты в постоянной области, вам не нужно беспокоиться об их удалении - они связаны только с запросом, и после завершения запроса они будут собираться по мере необходимости.
Если вы помещаете объекты в постоянную область действия, вам, вероятно, все равно не нужно беспокоиться об их удалении, но если вы решите, что вы это делаете, вы можете использовать StructDelete для его удаления (как и любую другую переменную). Конечно, вы должны быть осторожны, чтобы не делать этого, пока это необходимо.
Создайте объект с помощью CreateObject
и назначить его переменной:
<cfset handler = CreateObject("component", "form_img_handler")>
<cfset handler.upload(URL.command, URL.imgPath ... )>
Вы можете вызвать вторую строку в цикле после того, как один раз создали экземпляр объекта.