Cfcfhart в пределах cfthread возможно?как получить вывод? - PullRequest
3 голосов
/ 13 марта 2012

Я пытаюсь улучшить время выполнения одного из моих отчетов, который использует 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 и просто использовать изображение для построения документа в более позднее время, когда все потоки закончатся, но мне было интересно, есть ли какой-нибудь способ получить вывод cfchart из cfthread.

Ответы [ 3 ]

0 голосов
/ 13 марта 2012

Я не проверял это, это всего лишь идея, но вы можете попробовать поместить cfchart в блок cfsavecontent.

0 голосов
/ 27 октября 2016

Мне удалось использовать 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 с cfcharts внутри cfthread.

0 голосов
/ 13 марта 2012

Попробуйте поместить пользовательский тег вокруг вызова cfchart и записать сгенерированное содержимое в переменную, а затем получить к нему доступ, используя область потоков.Я не уверен, что это будет работать (в зависимости от вашего формата вывода).

...