我正在尝试升级照片库系统,我们必须能够获取50-100个大型(~500K-1MB)图像的文件夹并批量处理每个图像的缩略图,中等和高分辨率版本(并为每个数据库添加一条记录。)
我写了一个<cffunction>
就是这么做的。它适用于较小图像的小文件夹,但是较大的图像文件夹会产生严重的性能问题,并且在完成50次或更多次投掷后,会产生随机错误(超时或文件权限问题)。< / p>
我的问题:如何在最大限度地降低对整个服务器的性能影响的同时完成这些密集型工作?甚至可以单独使用ColdFusion,还是需要查看其他服务器插件? (我在这方面没有任何经验。)
更新:由于我的共享托管限制,我目前正在将注意力重定向到客户端大小调整(Flash),然后才能上传,因此服务器只需上传/移动并创建db记录。但是,我需要一些能够将原始图像调整为拇指/中/大版本并将其全部上传的内容。现在我只看到上传一张已调整大小的图片的示例,但我会尝试使用这些来源。
更新2:我看过一些非常酷的演示,展示了使用HTML5 <canvas>
重新调整图片的大小,我将尝试一下。我会回复任何结果。
答案 0 :(得分:3)
我认为最好的办法是使用异步网关:
http://www.coldfusionjedi.com/index.cfm/2006/9/7/Using-ColdFusions-Asynchronous-Gateway http://help.adobe.com/en_US/ColdFusion/9.0/CFMLRef/index.html
答案 1 :(得分:3)
答案 2 :(得分:1)
好吧,也许是异步网关,JVM调优的组合,可能会添加更多RAM或将图像处理拆分到不运行主应用程序的单独物理服务器上。
答案 3 :(得分:1)
问题可能更多是你试图在一个过程中完成这一切吗?
有几点建议: -
使用cfthread,它允许您并行运行相同的过程,每个过程可以同时处理少量的图像。说你在共享主机上虽然我不确定你是否可以使用它。您必须与提供商核实。
另一种选择可能是设置每分钟左右运行一次的计划任务。这需要XX量的图像,工作然后停止。下一个时间表会选择下一批等等......
这会减少流程,但我不确定如果他们期待某种结果,你将如何管理用户交互。您还需要考虑时间安排,即如果之前的计划任务尚未结束,该怎么办。
詹姆斯