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?)
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:
- unikać wielokrotnego stosowania
"//item"
.- nie oceniaj tego samego zestawu węzłów więcej niż raz; zapisz go w zmiennej.
- unikaj
<xsl:number>
jeśli możesz. Na przykład, używając position ().- Użyj
<xsl:key>
, na przykład do rozwiązania problemów grupowania.- unikaj skomplikowanych wzorców w regułach szablonów. Zamiast tego użyj w ramach zasady.
- należy zachować ostrożność podczas używania
preceding[-sibling]
lub / Align = "left" / To często wskazuje algorytm z n-kwadrat wydajność.- 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.- 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.
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 :
- zachowaj małe dokumenty źródłowe. W razie potrzeby najpierw podziel dokument.
- przechowywać procesor XSLT (i maszynę Wirtualną Java) w pamięci pomiędzy biegi
- jeśli używasz tego samego arkusza stylów wielokrotnie, skompiluj go najpierw.
- jeśli używasz tego samego dokumentu źródłowego wielokrotnie, zachowaj go w pamięci.
- jeśli wykonasz tę samą transformację wielokrotnie, nie rób tego. zamiast tego przechowuj wynik.
- Zachowaj mały dokument wyjściowy. Na przykład, jeśli generujesz HTML, użyj CSS.
- nigdy nie sprawdzaj poprawności tego samego dokumentu źródłowego więcej niż jeden raz.
- podziel przekształcenia złożone na kilka etapy.
Osiem porad jak napisać efektywne xSLT:
- unikać wielokrotnego użycia "
//item
". - nie oceniaj tego samego zestawu węzłów więcej niż raz; zapisz go w zmiennej.
- unikaj
<xsl:number>
jeśli możesz. Na przykład, używającposition()
. - Użyj
<xsl:key>
, na przykład do rozwiązania problemów grupowania. - unikaj skomplikowanych wzorców w regułach szablonów. Zamiast tego użyj
<xsl:choose>
wewnątrz reguły. - należy zachować ostrożność podczas używania
preceding[-sibling]
lubfollowing[-sibling]
siekiery. To często wskazuje algorytm o wydajnościn
-Kwadrat. - 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()
. - aby wypisać wartość tekstową prostego elementu # PCDATA, użyj
<xsl:value-of>
w preferencjach do<xsl:apply-templates>
.
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.
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:)
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