Forum .LRN Q&A: Re: performance optimization for dotLRN portlets

Collapse
Posted by Timo Hentschel on
I'm currently working on the categorization package which i will commit tommorrow in a first version. This is a cross-package since it has to enable users to categorize all kinds of objects. When displaying a list of all objects mapped to a particular category, i had to face two main problems:

a) getting the name of an object FAST (i refrain from using acs_object.name since it's not efficient when displaying a list of objects)
b) showing a link to the object

I solved a) by introducing a new subtype 'named_objects' of acs_objects. Every object-type in the system of displayable objects should now be derived from named_objects, no longer from acs_objects. More so, each package then should make sure that it stores the name and package_id in the new named_objects table (i will post details in a new thread). Then, i can simply join with the named_objects table whenever i need to get the name of an object. (drawback: objects can have only one name, so it's not multilingual, but acs_object.name wasn't either).

I solved b) by adding a .vuh page under /www/o/. It will accept an object_id, query the named_objects table to find out the package_id, get the package_url from the cache and then invoke a service-contract (which has to be implemented for every displable object-type) which will return the local url in the package to display that object.

To sum it up, with these modifications long overdue we can speed up those kind of queries where we need to get an object_name or a url considerably.