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

    上一篇: coldfusion and exceeding time limits

    下一篇: ColdFusion ... doing a CFHTTP call inside a CFLOOP