我需要遍历一组图像路径来抓取,调整大小并将图像从外部目标存储到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 ......)
感谢您的帮助!
答案 0 :(得分: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将其删除(仅像任何其他变量)。当然,在需要的时候你应该注意不要这样做。
答案 1 :(得分:4)
使用CreateObject
实例化您的对象并将其分配给变量:
<cfset handler = CreateObject("component", "form_img_handler")>
<cfset handler.upload(URL.command, URL.imgPath ... )>
在实例化对象一次之后,可以在循环中调用第二行。