INFO: Técnicas para melhorar o desempenho de transformações em XSL

Traduções deste artigo Traduções deste artigo
ID do artigo: 815124 - Exibir os produtos aos quais esse artigo se aplica.
Expandir tudo | Recolher tudo

Sumário

Este artigo lista algumas técnicas para melhorar o desempenho de transformações XSL (linguagem de folha de estilos extensível). XSL é uma linguagem funcional. XSL não dá suporte a recursos de linguagem comum. Por exemplo, XSL não dá suporte valores de retorno, ou globais. XSL não é uma linguagem orientada a objeto e, sendo modular custos ciclos de processador. Há não depuração disponíveis para XSL, portanto, a depuração difícil.

Mais Informações

Desempenho de uma transformação XSL depende dos cenários que você usar. As técnicas listadas neste artigo são diretrizes gerais. Certifique-se que você medir os resultados de cada ajuste. Somente testes podem provar se uma técnica específica melhora o desempenho ou não. Você pode usar o utilitário de linha de comando msxsl.exe para teste e para executar transformações de XSL de linha de comando usando o processador XSL do Microsoft. O utilitário msxsl.exe chama o Microsoft XML Parser 4.0 (msxml4.dll) para executar a transformação. Você pode baixar esse utilitário do MSDN seguinte site:
http://www.microsoft.com/downloads/details.aspx?FamilyID=2fb55371-c94e-4373-b0e9-db4816552e41&DisplayLang=en

Técnicas para melhorar o desempenho

  • Identifique os caminhos mais comuns de código para processar suas páginas e, em seguida, otimizar esses caminhos. Otimize seções da XSL altamente reutilizadas.
  • Em vez de usar subelementos, use atributos sempre que possível. Usando atributos em vez de elementos melhora o desempenho. Ao executar XPath correspondências, atributos são mais rápidos porque eles são digitados com. Isso facilita a validação do esquema.
  • Usar caminhos mais explícitos em vez de "/ /" sempre que possível. Quando dados XML serão grandes, "/ /" recursiva decedent pesquisa é muito cara. Expressão XPath específica implementa mais rápido.
  • Quando você correspondência com valores de atributo, use atributos do enumerador. Usar vários nomes de atributo como bits e defina seus valores como true ou false . Por exemplo:
    <element_name attr1="1" attr2="1" attr3="0">
  • Não use o script. Usando script degrada o desempenho.
  • Compare diretamente por nome para melhorar o desempenho. Por exemplo, em vez de usar o código a seguir:
    ./info[type='title']
    use o código a seguir:
    ./title
    quando você comparar valores, em vez de usar o nome da seguinte maneira:
    Select="*[name()='sample']"
    use o código a seguir:
    Select="sample"
    causa do namespace tratamento no XPath, são não exatamente equivalentes.
  • Todas as versões do MSXML, versão 3.0 e posterior, são mais rápidas com o filtro do índice explícita. O aprimoramento no desempenho depende da posição do elemento na lista filho do pai. Em vez de usar o seguinte:
    /child_element
    use o seguinte:
    /child_element[1]
  • Use parâmetros em vez de avaliar a consulta cada vez.
  • Transformações em XSL permite várias opções, no entanto, todos eles podem não funcionar adequadamente. Por exemplo, em vez de usando a seguinte transformação:
    <xsl:output method="html"/>
    usar a seguinte transformação:
    <xsl:output method="html" indent="no" />
    isso melhora o desempenho porque recuo fornece muita indesejados espaços em branco na saída. Por padrão, o valor para o recuo de atributo é Sim .
  • Linha o modelo com for-each ou atributo mode quando tiver certeza de que o modelo aplicar corresponde exatamente um modelo. Por exemplo:
    <xsl:apply-templates select="//xa:Axes/xa:Axis[@name='Axis1']" />
    <xsl:template match="//xa:Axis[@name='Axis1']/xa:Tuples/xa:Tuple">
    para cada nó que coincide com o seguinte:
    "//xa:Axes/xa:Axis[@name='Axis1']"
    a expressão a seguir:
    "//xa:Axis[@name='Axis1']/xa:Tuples/xa:Tuple"
    é avaliado em todos os outros modelos com o mesmo modo. Processador começa a executar modelos padrão. Isso copia todos os nós de texto e chama o seguinte:
    <xsl:apply-templates>
    para todos os elementos. Portanto, para todos os filhos do conjunto de nós original, correspondências possíveis expressão é avaliada. Correspondência a expressão não é uma tarefa simples. Para melhorar o desempenho, reescrever o código da seguinte maneira:
    <xsl:apply-templates select="//xa:Axes/xa:Axis[@name='Axis1']/xa:Tuples/xa:Tuple" mode="Axis1"/>
    <xsl:template match="*" mode="Axis1">
  • Use modelos de menos. Isso é aplicável quando você executar o mesmo modelo mais de uma vez. Há alguma melhoria no desempenho com forte for-each loop para procurar um modelo quando o número de modelos é menor.
  • Reduzir o uso de xsl: escolha / XSL: when / xsl: caso contrário . Desempenho é efetuado quando a maioria das seleções se a cláusula caso contrário . Portanto, coincide com ao e tente evitar o uso caso contrário, quando você sabe que um determinado valor existe.
  • XSL:Variables são valores dinâmicos. Essas variáveis não estão em cache e executado toda vez que eles são referenciados no XSL. Tipo explícito lançando de xsl:variable melhora o desempenho. Você pode fazer digite elenco com funções string() e boolean() . Por exemplo:
    <xsl:variable name="_attr" select="string( /node/child[ @attr ] )">
  • MSXML vs. System.XML
    • Analisador MSXML é diferente do XmlReader e XmlWriter .
    • MSXML carrega dados XML em um modelo de objeto de documento (DOM). Na árvore de DOM, dados podem facilmente ser navegados por meio do XPath, transformados através de XSL, ou editados e salvos novamente. Isso permite desenvolvimento mais fácil e mais potentes recursos no custa do uso da memória e velocidade.
    • XmlReader e XmlWriter são seqüenciais leitores e gravadores. O desenvolvedor mantém o estado manualmente ao ler e escrever dados XML. Isso permite que o uso de memória mínima e, portanto, melhora o desempenho.
    • O analisador MSXML também suporta SAX (Simple API para XML). SAX é seqüencial. O .NET Framework from VPE também suporta o DOM, usando a classe XmlDocument .
    • A melhor escolha depende a utilização de .NET Framework from VPE e a tarefa que você executar com XML.

  • Essa técnica está relacionada ao desempenho com o banco de dados. Desempenho MSXML e System.XML pode ser melhorado no pre-joining os campos de pesquisa, como mostra o código a seguir:
    <?xml version="1.0" encoding="UTF-8"?>
    <AllLocalDescriptor xmlns:fo="http://www.w3.org/1999/XSL/Format"> 
    <Descriptor key="AMC_Labels_" ID="AMC" Name="-2000" TypeName="Labels" LCID="">
      AMC
    </Descriptor>
    <Descriptor key="AMC_Labels_3082" ID="AMC" Name="-2000" TypeName="Labels" LCID="3082">
      AMC
    </Descriptor>
    você pode evitar verificação declarando @ chave do tipo ID.
    desc = doc.getNodeFromID("AMC_Labels_3082")

Referências

Para obter mais informações, visite os seguintes sites do Microsoft Developer Network (MSDN) da:
Guia do desenvolvedor do XSLT
http://msdn2.microsoft.com/en-us/library/ms759204.aspx
Aprimorando XSL
http://msdn2.microsoft.com/en-us/library/aa468550.aspx
Para obter informações adicionais sobre o desempenho do XSLT, clique nos números abaixo para ler os artigos na Base de dados de Conhecimento da Microsoft:
325689INFO: O desempenho do XSLT Transformations no .NET Framework
331026Mostre-me como: Ajustar o desempenho minha folha de estilos XSLT no .NET usando System.XML

Propriedades

ID do artigo: 815124 - Última revisão: sexta-feira, 2 de novembro de 2007 - Revisão: 2.4
A informação contida neste artigo aplica-se a:
  • Bibliotecas de Classes do Microsoft .NET Framework 1.0
  • Bibliotecas de Classes do Microsoft .NET Framework 1.1
  • Microsoft .NET Framework 1.0
  • Microsoft .NET Framework 1.1
Palavras-chave: 
kbmt kbperformance kbxml kbinfo KB815124 KbMtpt
Tradução automática
IMPORTANTE: Este artigo foi traduzido por um sistema de tradução automática (também designado por Machine Translation ou MT), não tendo sido portanto traduzido ou revisto por pessoas. A Microsoft possui artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais, com o objetivo de oferecer em português a totalidade dos artigos existentes na base de dados de suporte. No entanto, a tradução automática não é sempre perfeita, podendo conter erros de vocabulário, sintaxe ou gramática. A Microsoft não é responsável por incoerências, erros ou prejuízos ocorridos em decorrência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza atualizações freqüentes ao software de tradução automática (MT). Obrigado.
Clique aqui para ver a versão em Inglês deste artigo: 815124

Submeter comentários

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com