資訊: 技術來改善效能的 XSL 轉換

文章翻譯 文章翻譯
文章編號: 815124 - 檢視此文章適用的產品。
全部展開 | 全部摺疊

結論

本文將列出一些技巧,以改善效能的 「 可延伸樣式表語言 (XSL) 轉換。XSL 是功能性語言。XSL 不支援共通的語言的功能。比方說 XSL 不支援傳回值或全域變數。XSL 不是物件導向的語言,且正在模組化成本處理器循環。有沒有偵錯可用的 XSL,因此,偵錯變成困難。

其他相關資訊

XSL 轉換的效能取決於您使用的案例。本文所列的技術是一般的指導方針。請確定您測量每個微調的結果。只測試可以證明是否一特定的技術可改善效能與否。您可以使用 msxsl.exe 命令列公用程式來測試,和使用 Microsoft XSL 處理器執行指令行 XSL 轉換。msxsl.exe 公用程式會叫用 Microsoft 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 中處理之命名空間的這些都是不完全相等。
  • 所有版本的 MSXML 版本 3.0 版和之後,都較快明確索引篩選器。改進的效能取決於父代的子清單中項目的位置。使用下列的:
    /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>
    的所有項目。因此,針對所有的子系的原始 nodeset,會評估可能的符合運算式。比對運算式不是簡單的工作。若要改善效能,改寫程式碼,如下所示:
    <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() 函數與轉型 (Casting)。例如:
    <xsl:variable name="_attr" select="string( /node/child[ @attr ] )">
  • MSXML 對。 System.xml
    • MSXML 剖析器,與 XmlReaderXmlWriter 不同。
    • MSXML 將 XML 資料載入至文件物件模型 (DOM)。從這個 DOM 樹狀架構資料可以輕易地被透過 XPath 巡覽、 透過 XSL,轉換或編輯並儲存回。這可讓更容易開發和代價則是記憶體使用量和速度更強大的功能。
    • XmlReaderXmlWriter 是循序讀取器和寫入器。開發人員就可維護狀態讀取和寫入 XML 資料時,以手動方式。這可讓最少的記憶體使用量,並因此,可改善效能。
    • MSXML 剖析器也支援 SAX (XML 的簡單 API)。SAX 是連續的。.NET Framework 也支援 DOM,藉由使用 XmlDocument 類別。
    • 最佳的選擇取決於.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
enhancing XSL
http://msdn2.microsoft.com/en-us/library/aa468550.aspx
取得更多資訊有關效能的 XSLT 按一下 [下列面的文件編號,檢視 「 Microsoft 知識庫 」 中 「 文件]:
325689資訊: 效能 XSLT 的.NET Framework 中的轉換
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
機器翻譯
重要:本文是以 Microsoft 機器翻譯軟體翻譯而成,而非使用人工翻譯而成。Microsoft 同時提供使用者人工翻譯及機器翻譯兩個版本的文章,讓使用者可以依其使用語言使用知識庫中的所有文章。但是,機器翻譯的文章可能不盡完美。這些文章中也可能出現拼字、語意或文法上的錯誤,就像外國人在使用本國語言時可能發生的錯誤。Microsoft 不為內容的翻譯錯誤或客戶對該內容的使用所產生的任何錯誤或損害負責。Microsoft也同時將不斷地就機器翻譯軟體進行更新。
按一下這裡查看此文章的英文版本: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