[ 
https://issues.apache.org/jira/browse/FREEMARKER-207?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Dániel Dékány resolved FREEMARKER-207.
--------------------------------------
    Fix Version/s: 2.3.32
       Resolution: Fixed

> Slow processing of large xml files freemarker
> ---------------------------------------------
>
>                 Key: FREEMARKER-207
>                 URL: https://issues.apache.org/jira/browse/FREEMARKER-207
>             Project: Apache Freemarker
>          Issue Type: Bug
>          Components: engine
>    Affects Versions: 2.3.29, 2.3.31
>            Reporter: Gert Van der Voorde
>            Priority: Major
>              Labels: performance
>             Fix For: 2.3.32
>
>
> I had a problem when using Freemarker with xml 's containing large content ( 
> > 600KB)
> The problem is in the class ElementModel in method getAsTring in package 
> freemarker.ext.dom.
> The number of nodes were high, more then 10 000 and when using String 
> concatenation as in the following snippet the performance was/is very poor.
> {code:java}
>  @Override
>     public String getAsString() throws TemplateModelException {
>         NodeList nl = node.getChildNodes();
>         String result = "";
>         for (int i = 0; i < nl.getLength(); i++) {
>             Node child = nl.item(i);
>             int nodeType = child.getNodeType();
>             if (nodeType == Node.ELEMENT_NODE) {
>                 String msg = "Only elements with no child elements can be 
> processed as text."
>                              + "\nThis element with name \""
>                              + node.getNodeName()
>                              + "\" has a child element named: " + 
> child.getNodeName();
>                 throw new TemplateModelException(msg);
>             } else if (nodeType == Node.TEXT_NODE || nodeType == 
> Node.CDATA_SECTION_NODE) {
>                 result += child.getNodeValue();
>             }
>         }
>         return result;
>     } {code}
> For a xml file of 600kb this took 6 to 11 seconds to process.
> When using a StringBuilder this takes 60 ms.
>  
> I already made a pull request for this : 
> https://github.com/apache/freemarker/pull/82



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to