Loops 对于重复性任务,我应该使用cfobject还是cfinvoke?
我需要在一组图像路径上循环,以获取、调整和存储从外部目标到S3的图像 我习惯于打电话给cfcs这样做:Loops 对于重复性任务,我应该使用cfobject还是cfinvoke?,loops,coldfusion,cfinvoke,Loops,Coldfusion,Cfinvoke,我需要在一组图像路径上循环,以获取、调整和存储从外部目标到S3的图像 我习惯于打电话给cfcs这样做: <cfinvoke component="form_img_handler" method="upload" returnvariable="imgSuccess"> <cfinvokeargument name="command" value="upload_search"/> <cfinvokeargument name="imgPath" v
<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
被实例化,运行它的作业,然后消亡。而cf对象
将留在那里。如果是这样,在上述情况下使用cfobject
是否更好?如果是这样,我将如何调用我的upload
函数(传递参数),以及在完成后如何删除对象
(以前从未使用过cfobject…)
谢谢你的帮助 使用
CreateObject
实例化对象并将其分配给变量:
<cfset handler = CreateObject("component", "form_img_handler")>
<cfset handler.upload(URL.command, URL.imgPath ... )>
在实例化对象一次后,可以调用循环中的第二行。也可以使用类似于 外部循环(可能在全局范围内,例如应用程序):
或
内部循环:
<cfset imgSuccess = form_img_handler.upload
( command = "upload_search"
, imgPath = results.bildpfad
, imgFile = results.bilddateiname
, sellerILN = results.iln
, cookie = variables.screenWidth
)/>
因为它更具可读性
您没有性能问题,除非您有一个可重复的测试用例证明您有性能问题
关于删除对象…
如果不将对象放置在持久作用域中,则不必担心删除它们——它们只与请求关联,一旦请求结束,它们将根据需要进行垃圾收集
如果要将对象放置在持久作用域中,可能仍然不需要担心删除它们,但如果确定要删除,可以使用StructDelete删除它(就像任何其他变量一样)。当然,在需要时,您应该小心不要这样做。您可以使用
cfinvoke
重用对象。你只是看不到很多这样的例子。也就是说,cfinvoke语法对我来说太庞大了:)我更喜欢Cody和Peter的方法。。。如果有多个用户启动上载
,会发生什么情况?这些是按顺序运行还是同时运行?如果我在会话范围中设置对象,会有什么不同吗?这取决于组件内部的逻辑。确保变量的作用域正确,避免文件名冲突,等等,这样对同时使用的用户就可以正常工作。确定。因此,在我的cffunction中,我声明var LOCAL={},并在其中存储我需要的所有内容(LOCAL.xyz=“value”),包括传递的参数。应该可以吧?
<cfset imgSuccess = form_img_handler.upload
( command = "upload_search"
, imgPath = results.bildpfad
, imgFile = results.bilddateiname
, sellerILN = results.iln
, cookie = variables.screenWidth
)/>