RE: Processor Performance

Subject: RE: Processor Performance
From: "WYSOCKI Adalbert" <waldi@xxxxxxxxxxxxxx>
Date: Wed, 19 Jan 2000 14:52:40 +0100
Finnaly someone interested in XSLT performance processors.
I asked for those informations before but nobody was able to give me a
response.

Adalbert WYSOCKI

I performed some tests resumed above:



    Tests on XSLT processors
    ------------------------

The main point to evaluate in order to decrease the processing time applying
style rules to an XML document is to choose the best XSL Processor
associated with the best XML parser. I mean the processor that have the best
conformance with regards to XSLT recommendations and that processes style
sheets as fast as possible and as regularly as possible. For that we have
performed some test with each processor with different XSL documents and XML
documents to reflect different possible cases. Results are resumed in the
following paragraph.

    Tested processors
    -----------------

- XT version Version 19991105 (the reference) written by James Clark
implementing the last recommendations(http://www.jclark.com)
- Saxon Version 5.0 written by Mike Kay implements the last recommendations
(http://users.iclway.co.uk/mhkay/saxon)
- Xalan v0.19.1 processor known in the past as Lotus XSL (It have been
offered by IBM to an open source apache XML project
(http://xml.apache.org)).
- Oracle v2_0_2_6 processor part of Oracle 8i database product.

    Enviromnent
    -----------

- PC Pentium III 500
- 256 Mo
- Windows NT 4.0 Server
- JDK 1.2.2 (+ JIT)


     Results
     -------

For each test given results are:

- An average on times get from the test performed 60 times
- The minimum value from 60 times
- The maximum value from 60 times

   *********
   * Test1 *
   *********

Documents:

- XML document: stats.xml (8ko)
- Style document:  statistics_list.xsl (47ko)

 ---------------------------------------------------------------------------
--------------------------------------------
|Processeur   |    XT + Xerces  |  XT + SUN  |  Saxon + Xerces  |  Saxon +
SUN  |  Xalan + Xerces  |  Oracle + Oracle   |
 ---------------------------------------------------------------------------
--------------------------------------------
|Average (ms) |    54.58333333  |    51.75   |    108.6333333   |     159.9
|      151.7167    |       169.75       |
|Min (ms)     |       20        |    20      |      50          |     90
|      80          |       140          |
|Max (ms)     |       350       |    421     |      610         |     851
|      932         |       1101         |
 ---------------------------------------------------------------------------
--------------------------------------------

   *********
   * Test2 *
   *********

Documents:

- XML document: stats2.xml (21ko)
- Style document:  statistics_list.xsl (47ko)

Changes: contracts BO with class="display" attribute has been increased by
10 so that the matching of this BO in the XSL style sheet is made 10 times
more that in the preceding case.

 ---------------------------------------------------------------------------
--------------------------------------------
|Processeur   |    XT + Xerces  |  XT + SUN  |  Saxon + Xerces  |  Saxon +
SUN  |  Xalan + Xerces  |  Oracle + Oracle   |
 ---------------------------------------------------------------------------
--------------------------------------------
|Average (ms) |       165.2     |    220.8   |      368.55      |     419.1
|      552.8       |       422.1        |
|Min (ms)     |       110       |    140     |      281         |     320
|      400         |       270          |
|Max (ms)     |       650       |    670     |      962         |     1182
|      1592        |       1472         |
 ---------------------------------------------------------------------------
--------------------------------------------

	XSLT Rules
      ----------

I have performed some tests changing, replacing and inverting rules in XSL
style sheets.
We found a rule (use absolute path instead of //) that makes documents
processing 10 times quickly.
Resulting XSL documents will be processed in less than 100 ms. I think it is
satisfying comparing to database requests processing time.

      C/C++ vs. Java
      --------------

Processors in C language are not yet available in general. The XSLT
recommendations are in most part based on the Java language especially
concerning some functions like those for number formatting or some others.
For those reasons their implementation in C language seems to be more
difficult than in Java. I have tested Xalan XSLT processor in its first
version. A lot of XSLT functionalities are not yet implemented and its debug
mode makes it process very slowly. I think to see very efficient XSLT
processor we have to wait some times.

Results of the test performed on the summary.xsl and summary.xml documents.
 ------------------------------------------
|Processor   |   XT Java   |    Xalan C++  |
 ------------------------------------------|
|processig   |     500     |     2000      |
|time (ms)   |             |               |
 ------------------------------------------


      XT processor DOM source or serialized DOM InputSource
      -----------------------------------------------------


 -------------------------------------------------
| Serialized   |  Login   |  Summary   |  Stats   |
| InputSource  |  page    |   page     |  page    |
|-------------------------------------------------|
|              |   40     |    240     |   130    |
|              |   40     |    230     |   160    |
|              |   40     |    260     |   120    |
|              |   30     |    230     |   140    |
|              |   40     |    240     |   120    |
|              |   30     |    240     |   121    |
|              |   40     |    240     |   100    |
|              |   30     |    230     |   120    |
|              |   60     |    270     |   120    |
|              |   41     |    270     |   110    |
|-------------------------------------------------|
| Average      |  39.1    |    245     |   124.1  |
 -------------------------------------------------
 -------------------------------------------------
| DOM Object |    Login   |  Summary   |  Stats   |
|            |     page   |   page     |  page    |
|-------------------------------------------------|
|            |    40      |    571     |    171   |
|            |    30      |    521     |    130   |
|            |    30      |    491     |    271   |
|            |    40      |    430     |    130   |
|            |    30      |    400     |    130   |
|            |    41      |    401     |    140   |
|            |    40      |    411     |    130   |
|            |    30      |    390     |    120   |
|            |    30      |    401     |    140   |
|            |    40      |    400     |    130   |
|-------------------------------------------------|
| Average    |    35.1    |    441.6   |    149.2 |
 -------------------------------------------------

We can see that XT runs in general case better with a serialized InputSource
document that with a DOM object.

      Conclusions
      -----------

Comparing to the fastest other XSLT processors XT is two times quickly. What
is important too is the difference between the behavior of the XT and Saxon
processor associated with from one part ProjectX parser (SUN) and from the
other part with Xerces parser  (xml apache project).

      Annexe A
      --------

- Stats.xml

	Size: 8ko
	Contains:

<?xml version="1.0" encoding="UTF-8"?>
<test>
  <protocol>
    <userrequest>
      <xmldoc>common/statistics/statistics_offers_default.xml</xmldoc>
      <statstype>offers</statstype>
      <style>common/statistics/statistics_list.xsl</style>
      <statsobjectid>1000</statsobjectid>

<urlbase>/servlet/ImServlet?JServSessionId=3fe7ad6d23f5084e.3.944480829706&a
mp;</urlbase>
      <dateformat>MM/dd/yyyy</dateformat>
    </userrequest>
  </protocol>

  <businessobject>
   <merchant>
      <id>1000</id>
      <pagetitle>Welcom the best merchant pe qui peut tout "Peter"
!!!!</pagetitle>
      <currentquarter>1</currentquarter>
      <state>A</state>
      <businesscontact>
	<id>1000</id>
	<login>pe</login>
	<lastaccess>12/06/1999</lastaccess>
	<profile>A</profile>
      </businesscontact>
    </merchant>
    <offer>
      <id>1000</id>
      <name>http://www.perdu.com</name>
      <familyRef>1000</familyRef>
    </offer>
    <contract class="display">
      <offer>
        <name>http://www.perdu.com</name>
        <commissionmethods>
          <commissionmethodRef>1000</commissionmethodRef>
        </commissionmethods>
        <id>1000</id>
      </offer>
      <subscriber>
        <affiliate>
          <id>1010</id>
          <name>aldo1</name>
        </affiliate>
      </subscriber>
      <id>1016</id>
      <name />
      <enddate format="MM/dd/yyyy">01/27/2000</enddate>
    </contract>

   <!- contract BO with class="display" attribute x3 -- >

    <contract>
      <offer>
        <name>http://www.perdu.com</name>
        <commissionmethods>
          <commissionmethodRef>1000</commissionmethodRef>
        </commissionmethods>
        <id>1000</id>
      </offer>
      <subscriber>
        <affiliate>
          <id>1010</id>
          <name>aldo1</name>
        </affiliate>
      </subscriber>
      <id>1016</id>
      <name />
      <enddate format="MM/dd/yyyy">01/27/2000</enddate>
    </contract>

    <!- contract BO x3 -- >

    <parameter>
      <id>6</id>
      <name>Number of buy</name>
      <type>F</type>
      <backendparameterid>6</backendparameterid>
    </parameter>

    <!-- parameter BO x11 -->

    <intervaldates>
      <type>thismonth</type>
      <dateformat>MM/dd/yyyy</dateformat><begindate
format="MM/dd/yyyy">12/01/1999</begindate>
      <enddate format="MM/dd/yyyy">12/05/1999</enddate>
      <numberofdays>4</numberofdays>
    </intervaldates>

    <commissions>
      <commissiondate format="MM/dd/yyyy">12/01/1999</commissiondate>
      <commissiondate format="MM/dd/yyyy">12/05/1999</commissiondate>
      <contract groupby="yes">
        <id>1016</id>
      </contract>
      <value>0.0</value>
    </commissions>

    <!-- commissions BO x3 -->

  </businessobject>
</test>

- Stats2.xml

Size: 21 ko
Contains:

The same that the preceding (stats.xml) but contracts BO with class=”
display” attribute has been increased by 10 so that the matching of this BO
in the XSL style sheet is made 10 times more that in the preceding case.


- statistics_list.xsl

Statistics_list.xsl

	Size: 47ko
	Contains: Too long to be inserted



 XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list


Current Thread