Jak profilować i optymalizować XSLT?

Mam XSLT do przeglądania plików XML w przeglądarce. XSLT jest naiwnie napisany i obecnie wykonanie zajmuje dużo czasu (kilka minut).

Mój plik XML ma niewielki rozmiar (~1 MiB), a inne pliki XSLT dla tego samego dokumentu, które wykonują różne przetwarzanie, wykonują się znacznie szybciej. Więc wiem, że to nie rozmiar XML jest problemem, to mój XSLT.

Jak mam profilować i optymalizować mój XSLT?

(czy to zły pomysł robić złożone XSLT w przeglądarce? Czy zamiast tego powinienem zastosować stronę aplikacji XSLT?)

Author: pauldoo, 2009-01-12

4 answers

Jakiego silnika XSLT używasz? Jeśli korzystasz z silnika. NET i Visual Studio, możesz użyć XSLT profiler zintegrowany z Visual Studio, który jest bardzo przydatny.

Inne doskonałe narzędzia do profilowania to Altova ' s XML Spy i Oxygen .

Jeśli umieścisz swój XSLT, łatwiej będzie ci powiedzieć, gdzie są wąskie gardła. Ogólnie należy uważać z wyrażeniami XPath, takimi jak'//', poprzedzającymi:: * i następującymi::*. Jeszcze kilka zasad i najlepsze praktyki:

  1. unikać wielokrotnego stosowania "//item".
  2. nie oceniaj tego samego zestawu węzłów więcej niż raz; zapisz go w zmiennej.
  3. unikaj <xsl:number> jeśli możesz. Na przykład, używając position ().
  4. Użyj <xsl:key>, na przykład do rozwiązania problemów grupowania.
  5. unikaj skomplikowanych wzorców w regułach szablonów. Zamiast tego użyj w ramach zasady.
  6. należy zachować ostrożność podczas używania preceding[-sibling] lub / Align = "left" / To często wskazuje algorytm z n-kwadrat wydajność.
  7. nie Sortuj tego samego zestawu węzłów więcej niż raz. Jeśli to konieczne, zapisz go w rezultacie fragment drzewa i dostęp it using the node-set() extension funkcja.
  8. aby wypisać wartość tekstową prostego elementu #PCDATA, użyj <xsl:value-of> zamiast <xsl:apply-templates>.

(z http://www.dpawson.co.uk/xsl/sect4/N9883.html#d15756e150 )

Przestrzeganie tych zasad zazwyczaj skutkuje bardzo wydajnym XSLT i prawdopodobnie nie trzeba w ogóle użyć profilera.

Jeśli chodzi o twoje pytanie dotyczące XSLT w przeglądarce: nie polecam go, ponieważ po pierwsze nie jesteś niezależny od platformy (nie każda przeglądarka może go obsługiwać lub niektóre przeglądarki mogą obsługiwać tylko z źle działającym silnikiem), a po drugie nie możesz kontrolować używanego silnika.

 32
Author: Dirk Vollmar,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-06-26 07:50:36

Jeśli podasz kod XSLT i dokument XML, na którym zaobserwujesz problem, ja i inni ludzie moglibyśmy spróbować pomóc .

Oto kilka wskazówek dotyczących użycia i wydajności XSLT od Michaela Kay:

Osiem wskazówek jak efektywnie używać XSLT :

  1. zachowaj małe dokumenty źródłowe. W razie potrzeby najpierw podziel dokument.
  2. przechowywać procesor XSLT (i maszynę Wirtualną Java) w pamięci pomiędzy biegi
  3. jeśli używasz tego samego arkusza stylów wielokrotnie, skompiluj go najpierw.
  4. jeśli używasz tego samego dokumentu źródłowego wielokrotnie, zachowaj go w pamięci.
  5. jeśli wykonasz tę samą transformację wielokrotnie, nie rób tego. zamiast tego przechowuj wynik.
  6. Zachowaj mały dokument wyjściowy. Na przykład, jeśli generujesz HTML, użyj CSS.
  7. nigdy nie sprawdzaj poprawności tego samego dokumentu źródłowego więcej niż jeden raz.
  8. podziel przekształcenia złożone na kilka etapy.

Osiem porad jak napisać efektywne xSLT:

  1. unikać wielokrotnego użycia "//item".
  2. nie oceniaj tego samego zestawu węzłów więcej niż raz; zapisz go w zmiennej.
  3. unikaj <xsl:number> jeśli możesz. Na przykład, używając position().
  4. Użyj <xsl:key>, na przykład do rozwiązania problemów grupowania.
  5. unikaj skomplikowanych wzorców w regułach szablonów. Zamiast tego użyj <xsl:choose> wewnątrz reguły.
  6. należy zachować ostrożność podczas używania preceding[-sibling] lub following[-sibling] siekiery. To często wskazuje algorytm o wydajności n-Kwadrat.
  7. nie Sortuj tego samego zestawu węzłów więcej niż raz. Jeśli to konieczne, zapisz go jako wynikowy fragment drzewa i uzyskać do niego dostęp za pomocą funkcji rozszerzenia node-set().
  8. aby wypisać wartość tekstową prostego elementu # PCDATA, użyj <xsl:value-of> w preferencjach do <xsl:apply-templates>.
 23
Author: Dimitre Novatchev,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-01-12 19:09:52

Komercyjny edytor Oxygen XML posiada funkcję do profilowania i debugowania plików XSLT. To też dobry edytor XML.

 2
Author: lindelof,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-10-31 05:54:45

Lubię używać Altovy ' s XMLSpy dla komputerów z systemem Windows. Posiada również wbudowany profiler. Możesz zobaczyć film na temat korzystania z edytora. (Skanuj do 5: 45, aby dowiedzieć się więcej o profilerze). Jest to produkt komercyjny... z okresem próbnym:)

 1
Author: null,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-01-12 10:14:30