Deixe seus XPaths mais rápidos
Jonas Abreu em 29/07/2012Recentemente tive novamente problemas com performance de XPaths. Basicamente, processamento de XPaths era responsável por 25% do tempo da requisição.
Procurando sobre como melhorar a performance de XPaths, encontrei uma pergunta muito interessante no StackOverflow.
Basicamente existe um bug na implementação da JAXP da Apache, que é a que usamos nessa aplicação (e que parece ser a implementação distribuída com a JDK)
Para contornar esse bug, basta adicionar uma das seguintes flags (dependendo se você usa a implementação padrão ou um jar do Xalan):
-Dorg.apache.xml.dtm.DTMManager=org.apache.xml.dtm.ref.DTMManagerDefault
ou
-Dcom.sun.org.apache.xml.internal.dtm.DTMManager=com.sun.org.apache.xml.internal.dtm.ref.DTMManagerDefault
Em um benchmark muito ruim, apenas para verificar rapidamente se existia alguma diferença, obtive um tempo de processamento 50% menor que sem a flag.
Em produção, depois de colocarmos a flag, notamos uma redução de 40% do tempo de processamento de XPath, o que resultou em uma melhoria perto de 10%. Nada mal para quase nenhum trabalho.