信息: 技术,以提高性能的 XSL 转换

文章翻译 文章翻译
文章编号: 815124 - 查看本文应用于的产品
展开全部 | 关闭全部

概要

本文列出了一些技术来提高性能的可扩展样式表语言 (XSL) 转换。XSL 是一种功能的语言。XSL 不支持公共语言的功能。例如对于 XSL 不支持返回的值或全局变量。XSL 不是一个面向对象的语言,并且正在模块化成本处理器时钟周期数。没有可用于 XSL 的没有调试,因此,调试变得很困难。

更多信息

一个 XSL 转换的性能取决于您使用的方案。在这篇文章中列出的技术是常规的指导原则。请确保您测量的每个调整结果。仅测试可以证明是否特定技术或不提高性能。用于测试,和使用 Microsoft XSL 处理器执行命令行 XSL 转换,您可以使用 msxsl.exe 命令行实用程序。msxsl.exe 实用程序调用该 XML 分析器 4.0 (msxml4.dll) 执行转换。您可以下载此实用程序从下面的 MSDN 网站:
http://www.microsoft.com/downloads/details.aspx?FamilyID=2fb55371-c94e-4373-b0e9-db4816552e41&DisplayLang=en

若要提高性能的技巧

  • 识别最常见的代码路径,来呈现您的网页,然后优化这些路径。优化高重复使用的 XSL 节。
  • 而不是使用子元素的尽可能使用属性。使用属性而不元素可以提高性能。在执行 XPath 匹配项时属性是速度更快,因为它们都松类型化的。 这样的架构验证会更加容易。
  • 使用更明确的路径,而不是"/ /"无论在哪里都可以。 大型,XML 数据时"/ /"递归 decedent 搜索会非常昂贵。 更快地实现特定的 XPath 表达式。
  • 匹配属性值,当使用枚举数属性。多个属性名用作位,并将它们的值设置为 truefalse。例如:
    <element_name attr1="1" attr2="1" attr3="0">
  • 不要使用脚本。使用脚本降级性能。
  • 比较直接通过名称来提高性能。例如对于代替使用下面的代码:
    ./info[type='title']
    使用下面的代码:
    ./title
    当您比较数值而不是使用的名称,如下所示:
    Select="*[name()='sample']"
    使用下面的代码:
    Select="sample"
    由于在 XPath 中处理的该命名空间的这些是不完全等效。
  • 所有版本,版本 3.0 版及更高,都是 MSXML 的与显式索引筛选器更快。提高了性能取决于在父级的子列表中元素的位置。而不是使用以下的:
    /child_element
    使用以下内容:
    /child_element[1]
  • 使用参数而不是计算每个时间的查询。
  • XSL 转换允许多个选项,但是,所有这些可能不执行充分。例如对于而不是使用的以下转换:
    <xsl:output method="html"/>
    使用以下转换:
    <xsl:output method="html" indent="no" />
    因为缩进提供了很多不需要在输出中的空白区域,这将提高性能。默认状态下, 为属性缩进值。
  • 内联模板与 为每mode 属性 时您确信您 应用模板 匹配一个模板。例如:
    <xsl:apply-templates select="//xa:Axes/xa:Axis[@name='Axis1']" />
    <xsl:template match="//xa:Axis[@name='Axis1']/xa:Tuples/xa:Tuple">
    为每个匹配以下的节点:
    "//xa:Axes/xa:Axis[@name='Axis1']"
    下列表达式:
    "//xa:Axis[@name='Axis1']/xa:Tuples/xa:Tuple"
    计算上具有相同的模式的所有其他模板。处理器开始运行默认的模板。这将复制所有的文本节点,并调用以下:
    <xsl:apply-templates>
    所有元素。因此,原来的节点集的所有孩子帐户,计算可能的匹配表达式。匹配表达式不是一个简单的任务。若要在改善重写代码,如下所示:
    <xsl:apply-templates select="//xa:Axes/xa:Axis[@name='Axis1']/xa:Tuples/xa:Tuple" mode="Axis1"/>
    <xsl:template match="*" mode="Axis1">
  • 使用较少的模板。当您运行相同的模板更多的时间时,这是适用的。没有紧密的性能的一些改进 为每 循环来搜索时的模板数更少的模板。
  • 降低的使用 xsl: 选择 / xsl:when / xsl: 否则为。性能会受影响在选定的大多数下降,否则为 子句通过时。因此,匹配 ,并尝试避免使用 否则 当您知道某个特定值的存在。
  • xsl:variables 是动态的值。这些变量不在缓存,和 XSL 中运行他们所引用的每个时间。显式类型强制转换的 xsl:variable 可以提高性能。您可以执行键入 string ()boolean() 函数使用强制转换。例如:
    <xsl:variable name="_attr" select="string( /node/child[ @attr ] )">
  • MSXML 与。 System.Xml
    • MSXML 分析器是与 XmlReaderXmlWriter 不同。
    • MSXML 将 XML 数据加载到文档对象模型 (DOM)。从该 DOM 树数据可方便地通过 XPath 定位、 转换通过 XSL,或编辑并保存回。这使得更易于开发和消耗的内存使用情况和速度的功能更强大功能。
    • XmlReader 和 $ XmlWriter 是有序读取器和编写器。开发人员对手动在读取和写入 XML 数据时的状态进行维护。这使最少的内存使用情况并,因此,可以提高性能。
    • MSXML 语法分析器还支持 SAX (的 XML 的简单 API)。SAX 是连续的。.NET 框架还支持通过使用 如下 类的 DOM。
    • 最佳的选择取决于.net 的利用率框架,并在您使用 XML 执行该任务。

  • 此技术与数据库与性能相关。 MSXML 和 System.Xml 性能可以改进中 pre-joining 查阅字段,如下面的代码中所示:
    <?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>
    可以避免通过声明的类型 id。 键 @ 扫描
    desc = doc.getNodeFromID("AMC_Labels_3082")

参考

有关更多的信息,请访问下面的 Microsoft 开发人员网络 (MSDN) 的网站:
XSLT 开发人员指南 》 中的
http://msdn2.microsoft.com/en-us/library/ms759204.aspx
增强的 XSL
http://msdn2.microsoft.com/en-us/library/aa468550.aspx
XSLT 的性能有关的其他信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
325689信息: 性能的 XSLT 转换,.net 框架中
331026如何显示我: 性能调整在.net 中使用 System.Xml 我 Xslt 样式表

属性

文章编号: 815124 - 最后修改: 2007年11月2日 - 修订: 2.4
这篇文章中的信息适用于:
  • Microsoft .NET Framework Class Libraries 1.0
  • Microsoft .NET Framework Class Libraries 1.1
  • Microsoft .NET Framework 1.0
  • Microsoft .NET Framework 1.1
关键字:?
kbmt kbperformance kbxml kbinfo KB815124 KbMtzh
机器翻译
注意:这篇文章是由无人工介入的微软自动的机器翻译软件翻译完成。微软很高兴能同时提供给您由人工翻译的和由机器翻译的文章, 以使您能使用您的语言访问所有的知识库文章。然而由机器翻译的文章并不总是完美的。它可能存在词汇,语法或文法的问题,就像是一个外国人在说中文时总是可能犯这样的错误。虽然我们经常升级机器翻译软件以提高翻译质量,但是我们不保证机器翻译的正确度,也不对由于内容的误译或者客户对它的错误使用所引起的任何直接的, 或间接的可能的问题负责。
点击这里察看该文章的英文版: 815124
Microsoft和/或其各供应商对于为任何目的而在本服务器上发布的文件及有关图形所含信息的适用性,不作任何声明。 所有该等文件及有关图形均"依样"提供,而不带任何性质的保证。Microsoft和/或其各供应商特此声明,对所有与该等信息有关的保证和条件不负任何责任,该等保证和条件包括关于适销性、符合特定用途、所有权和非侵权的所有默示保证和条件。在任何情况下,在由于使用或运行本服务器上的信息所引起的或与该等使用或运行有关的诉讼中,Microsoft和/或其各供应商就因丧失使用、数据或利润所导致的任何特别的、间接的、衍生性的损害或任何因使用而丧失所导致的之损害、数据或利润不负任何责任。

提供反馈

 

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