coldfusion和超过时间限制
我有一些冗长而复杂的代码会进行一些解析,并且需要一段时间才能完成,但在这种情况下优化代码没有多大意义。
处理很长的执行时间并让用户知道何时完成的策略是什么?
解释为什么它没有多大意义进行优化
该应用程序具有面向最终用户的页面和不面向最终用户的页面。 在非用户面临的领域,我解析了几个excel电子表格。 加载和循环这些需要很长时间。 它优化了代码以在我今天可能运行的超时限制内运行,但是从现在开始的一个月,我可能会导入一个长度为4倍的文件,并且它不会再工作。 我试图解决的问题是绕过cf超时,我知道需要很长时间的特定操作。
我试过使用线程,但出于某种原因在CF9上工作,但不是CF8(虽然他们支持)
我也刚刚发现了cfsetting requestTimeOut
,它可能能够做我需要做的事情。
您可能已经查看了它,但是看看是否可以缓存任何内容,以减少等待的时间。
至于传达给用户,对于初学者来说,确保用户知道什么时候发生。 程序可以做的最糟糕的事情之一是接收输入,而不是反应。 确保用户知道什么时候发生。 您显示加载的方式取决于您。 如果加载时间大约在10秒左右,可能会有沙漏,但如果等待时间更长,您可能需要一个进度条或类似的东西。
如果有任何方法可以允许其中一些发生在后台或其他进程中,这可以帮助减轻负载。 否则,弹出一个建议,告诉他们去喝咖啡。 :)
这只是一个膝盖反应,只有一点点的信息,但如果你能给出更多关于你在找什么的想法和粗略的加载时间估计,我可能会得到更具体的。
方法1
我有一个关于II6和CF 7的网站。我添加了这个通过Javascript操作的条形图。 然后我会通过一个Javascript后面的<cfflush>
设置图形的长度。
它运行良好,直到网站升级到II7.5和CF 9.出于某种原因<cfflush>
不起作用,Javascript仍然可以设置栏并给出有意义的进展。
方法2
这需要两个iframe。
一个iframe运行长时间运行的进程,并且隐藏在用户视图中。
另一个iframe运行一个页面,每10秒钟刷新一次。 此页面查询缓慢进程的后端日志记录。 它可能会落后10秒,但最终用户甚至可能会注意到
方法3
与方法2一样,但使用AJAX
另一种方法是用这样的东西开始你的页面:
<div id="displayarea">
display something here
</div>
<cfflush>
然后做你需要做的任何处理。 一旦完成,就做这样的事情。
<cfsavecontent variable = "newdisplay_cf>
generate html here
</cfsavecontent>
<script>
<cfoutput>
var #toScript(newdisplay_cf, "newdisplay_js")#
</cfoutput>
document.getElementById("displayarea").value = newdisplay_js;
</script>
这里可能有一些语法错误。 我只是将代码输入到textarea中。
链接地址: http://www.djcxy.com/p/31199.html