[Koha-devel] Koha performance enhancement overview

Frédéric Demians frederic at tamil.fr
Wed Apr 18 13:58:37 CEST 2012


 > Unless we're working with a small catalogue, or one with only a few
 > popular items, I'm not sure we'd get much benefit from caching the
 > XSLT-processed HTML for individual biblios.  Outside of those cases, I
 > don't think a lot of people will be looking at the same records, so
 > we're just storing info until it expires, rather than reusing it.

+1

And I remind you that in C4::XSLT, items information are injected into
MARCXML prior to send it to XSLT for transformation into HTML. It means
that if we cache HTML representation of biblio records, we loose real-time
items availability in OPAC result page.

Concerning biblio records, what kill performances?

[1] GetMarcBiblio multiple calls

GetMarcBiblio function is used, and reused, and reused again, for the
same biblionumber. The CoinS tag generation for example do that: calling
GetMarcBiblio for a biblio record which has already be instantiated by
another function. Code could be improve. Or very simple to do,
GetMarcBiblio can be memoized (at script level without persistence).

[2] MARC::Record deserialization

In GetMarcBiblio (and other functions?), a MARC::Record is build based
on biblioitems.marcxml field. This is very slow as already
discussed. Since items are not anymore in biblio records, we don't need
anymore to use the biblio recorcd XML representation, and should use
biblioitems.marc field.

[3] XSLT transformation

Koha XSL stylesheets have to be parsed one time, in each script using
them. In persistent environment, this could be cached.

The biblio record is retrieved from biblioitems.marcxml, then a
MARC::Record object is build (it costs), then the MARC::Record is
completed with various info (authorized values, etc.), then the object
is serialized in XML, then the XML document is completed with items
real-time info, then the XML is sent to XSLT.

We would gain a lot by caching an XML version ready to be completed with
items info. This way, we wouldn't have to deserialize/serialize
MARC::Record objects.

Kind regards,
-- 
Frédéric DEMIANS
http://www.tamil.fr/u/fdemians.html



More information about the Koha-devel mailing list