This is the mail archive of the xsl-list@mulberrytech.com mailing list .


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]

Re: XSL processor authors - how about this approach?


Eric van der Vlist wrote:

> Dylan Walsh wrote:
> >
> > >Date: Wed, 08 Mar 2000 12:41:47 +0100
> > >From: Eric van der Vlist <vdv@dyomedea.com>
> > >Subject: Re: NewBie Question - Dynamic XSL
> >
> > <snip>
> >
> > >In this architecture, the operation which is taking most of the cycles
> > >is the parsing of the XSLT sheet (which can take several seconds) and is
> > >most of the time cached.
> >
> > Has anyone considered this kind of solution for server-side XSL? :
> > Take the stylesheet, parse it and generate a custom servlet to perform this
> > transformation. Then everytime XML needs to be transformed, this servlet
> > could be run. This approach is a bit like JSP. You can do thorough
> > optimisation when creating the servlet. It may even be possible to identify
> > sheets that don't need random access, and switch to serial mode for those,
> > saving memory.
> > I would think that having custom generated Java code to move the data around
> > would be faster than trying to figure out the stylesheet at run time. Great
> > potential here for a performance boost?
>
> You're right.
>
> I think I have seen similar approaches mentioned by Resin
> (http://www.caucho.com/products/resin/index.html) and also in the Cocoon
> mailing list (but I don't think Cocoon is implementing this yet).

Well, Resin does load the generated stylesheet class directly and only recompiles
it if the XSL sources change.  But, as Mike Kay points out, the performance gain
is pretty minimal.  After all, you only need to compile the stylesheet once when
the server starts and most of the stylesheet processing time is spent doing other
work.

The dynamic XSL idea would be pretty slow (at least for Resin), especially if
it's on a per-user preference basis. Instead, with Resin (or Cocoon), you would
probably use XML/XSL to generate a JSP page/Servlet to do the database lookup.

Part of the stylesheet might look something like:

<xsl:template match='/'>
  <jsp:useBean id='userPref' class='caucho.UserPrefBean'/>
  <jsp:scriptlet>userPref.init(request)</jsp:scriptlet>
  <xsl:apply-templates/>
</xsl:template>

<xsl:template match='author'>
  <font>
   <xsl:attribute name='color'>&lt;%= userPref.getFavoriteColor()
%></xsl:attribute>
   <xsl:apply-templates/>
  </font>
</xsl:template>

userPref.init(request) does whatever database lookup is needed.  The generated
JSP file looks like:

<jsp:useBean id='userPref' class='caucho.UserPrefBean'/>
<jsp:scriptlet>userPref.init(request)</jsp:scriptlet>

...

<font color='<%= userPref.getFavoriteColor()'>Kurt Vonnegut</font>

Once that's compiled into a servlet, it will run as fast as if you created the
JSP by hand, bypassing any further XSL processing.

Scott Ferguson
Caucho Technology



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

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]