cfthread中的cfhart是否可能?如何获得输出



我正在努力提高我的一个报告的执行时间,该报告使用cfcharts打印图形。代码本身是一个实体循环,我为每个实体创建一个图表(它是一个比较报告)。

由于报告的复杂性,通过内联完成这项工作几乎需要一分钟或更长的时间,所以我试图在这种情况下使用cfthread,但我不确定这是否可能。

这是代码:

<body> 
<cfloop array="#uuids#" index="uuid" >
   <cfthread action="run" name="t#threadCount#" output="to#threadCount#">
    ...
       <cfchart >
          ...
       </cfchart>
   </cfthread>
    ...
</cfloop>
</body>

正如预期的那样,cfchart不会在cfthread内"打印",尽管它显然正在执行。如何获得cfthread的输出?一个可能的解决方案是从cfchart创建一个图像,然后在所有线程完成后使用该图像构建文档,但我想知道是否有任何方法可以从cfthread获得cfchart输出。

尝试在cfchart调用周围放置一个自定义标记,并将生成的内容捕获到变量中,然后使用线程范围访问它。我不确定这是否可行(取决于您的输出格式)。

我还没有测试过,这只是一个想法,但您可以尝试将cfchart放入cfsavecontent块中。

我能够使用cfsavecontent进行保存,然后生成带引号的cfcharts。

只需确保使用的任何查询/数据变量都保存在cfsavecontent块中(我在这部分遇到了问题;如果不小心,作用域会有点不稳定)

<body> 
<cfloop array="#uuids#" index="uuid" >
   <cfthread action="run" name="t#threadCount#" output="to#threadCount#">
        <cfsavecontent variable="thisContent">
           <cfquery name="thisQuery" datasource="dsource">
              ...
           </cfquery>
        <cfchart >
           ...
        </cfchart>
       </cfsavecontent>
    </cfthread>
 ...
</cfloop>
<cfloop array="#uuids#" index="uuid" >
    <cfthread action="join" name="t#threadCount#"/>
    #thisContent#
 </cfloop>
</body>

我遇到的问题是动态变量命名/调用。我相信这是一个非常简单的解决方案,但如果我用我知道会创建的名称调用每个内容,它就会被显示出来——尽管这违背了使用动态变量的目的。但这完全是另一场战斗!答案是肯定的,您可以将cfsavecontent与cfthread中的cfcharts一起使用。

相关内容

  • 没有找到相关文章

最新更新