2

我需要遍历一组图像路径来抓取、调整大小并将图像从外部目的地存储到 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>

问题:
如果我必须循环执行 25 次,使用cfobject代替会更好cfinvoke吗?据我了解cfinvoke,被实例化,运行它的工作并消失。虽然cfobjects有留下来。如果是这样,在上述情况下使用会更好cfobject吗?如果是这样,我将如何调用我的upload函数(传递参数)以及完成后如何删除对象?

(以前从未使用过 cfobject ...)

感谢帮助!

4

2 回答 2

10

也不是,使用类似...

外部循环(可能在全局范围内,例如应用程序):

<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 来删除它(就像任何其他变量一样)。当然,您应该注意不要在需要时这样做。

于 2012-08-24T18:24:53.550 回答
4

使用实例化您的对象CreateObject并将其分配给变量:

<cfset handler = CreateObject("component", "form_img_handler")>
<cfset handler.upload(URL.command, URL.imgPath ... )>

实例化对象一次后,您可以在循环中调用第二行。

于 2012-08-24T18:24:39.777 回答