Должен ли я использовать 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 ... )>

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

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