Рендеринг XML с большим содержимым

Приложение CF возвращает XML-ответ настольному приложению. XML-ответ в порядке в пределах от 0,5 до 3 секунд. XML содержит вложения, которые заархивированы, а затем закодированы в base64. Как только у нас есть вложение немного больше, скажем, 5 МБ, ответ начинает занимать больше минуты. Не настоящий код, но это то, что я делаю (CF2016 и IIS):

<cfxml variable="myXML">    
<sample Status="NewJob" Type="response">
<NewJob>
   <jobNumber>3894743</jobNumber>
   <Rate>0</Rate>
   <doc><![CDATA[UEsDBBQACAAIAMl BASE_64_CONTENT]]></doc>
 </NewJob>
</sample>
</cfxml>
<cfset tempVar = xmlParse(trim(myXML))>
<cfcontent type="text/xml">
<cfoutput>#TempVar#</cfoutput>   

Хотя файлы заархивированы, но иногда сжатие невелико, и файл размером 8 МБ после сжатия составляет около 7 МБ. Общий вес страницы стал около 9 МБ+

Может ли помочь увеличение максимального выходного буфера с 1024 КБ до 4096 КБ или даже 2048 КБ? Какие-либо последствия для этого? Любые другие настройки в CF или IIS, которые можно настроить?


person CFML_Developer    schedule 17.05.2018    source источник


Ответы (1)


Почему вы используете xmlParse()? Тег <cfxml> уже создает XML-документ. Прямо сейчас ваш код преобразует документ XML в строку (аргумент xmlParse), затем анализирует его как документ XML (возврат xmlParse), а затем снова преобразует его в строку (вывод TempVar). Упростите свой код:

<cfxml variable="myXML">
    <sample Status="NewJob" Type="response">
        <NewJob>
            <jobNumber>3894743</jobNumber>
            <Rate>0</Rate>
            <doc><![CDATA[UEsDBBQACAAIAMl BASE_64_CONTENT]]></doc>
        </NewJob>
    </sample>
</cfxml>

<cfcontent type="text/xml">
<cfoutput>#myXML#</cfoutput>

Теперь ваш XML-документ преобразуется в строку только один раз и без какого-либо разбора. Это должно заметно ускорить обработку.

person Alex    schedule 18.05.2018
comment
Спасибо, что указали на это. Но это не внесло никаких изменений. Все еще беру такое же время. - person CFML_Developer; 18.05.2018