Re: getFolderContents: serious performance problem

Georges Racinet <[email protected]>
Newsgroups gmane.comp.web.zope.cps.devel
Message-ID <[email protected]>
On Oct 24, 2006, at 5:39 PM, Benoit Delbosc wrote:

> Hi
>
> Yves Bastide a écrit :
>> Hi,
>> CPSDefault.utils.getFolderContents causes a big performance  
>> problem on a site
>> we installed. A subsection containing about 4000 documents takes  
>> some 40
>> secondes to display for a 'SectionReader' user, versus 7 seconds  
>> for the Manager.
>> The profiler points out one main culprit: getRolesInContext (and also
>> DateTime's _parse_args). (*)
>> My first try was to give the View permission to the Authenticated  
>> role in the
>> subsection instead of using a SectionReader local role, but there  
>> wasn't much
>> improvement. After reading CPSDefault.utils.filterContents, the  
>> reason is obvious:
>> {{{
>>         # filter non effective or expired published content
>>         if not _checkPermission(ModifyPortalContent, item):
>>             review_state = wtool.getInfoFor(item, 'review_state',  
>> 'nostate')
>>             if review_state == 'published':
>>                 doc = item.getContent()
>>                 if now < doc.effective() or now > doc.expires():
>>                     continue
>> }}}
>> (_checkPermission could be pushed down in the tests; but I'm not  
>> sure whether
>> that would be much more efficient. The dates tests may also be  
>> costly.)
>> After my colleague remarked that searches were much quicker (~ 5  
>> seconds, and
>> with a more complex display), we tried to force using
>> getCatalogFolderContents, and lo! folder_view became 8 times faster.
>> So I'd like to know
>> * How to systematically use getCatalogFolderContents instead of
>> getFolderContents (in a clean way :) ) -- I'm not yet comfortable  
>> with CPS
>> views' many levels of inclusion
> Using the ZMI add a boolean property to the portal named  
> 'use_catalog_for_folder_contents' with a True value.
>
>> * Why it's not the case already (I've had incomplete indexes, but  
>> assume it's
>> my fault)
> It is a bit slower if you have only few items in a folder.
>
>> * Bonus question: can one sort on several indexes -- i.e. some of  
>> my documents
>> have a specific field which should be used as a default sort key;  
>> how to get
>> also documents of other types?
> I think you need to replace the default sort on  
> position_in_container with 2 sort keys: your new index first then  
> position_in_container.

If you want to go further, check also CPSDashboards, a component  
that's basically meant for this (at the expense of more  
configuration, it's not a drop-in replacement).

It'd be applicable if
	- you want to control according to portal_type of folder (typically  
you'd have BTree folders to hold lots of docs, and you'd need a new  
portal_type anyway for that)
	- you don't need the "move up" etc buttons (didn't make them yet,  
but you can specify an action category to get buttons)
	- you want to fully customize the columns, etc.

CPSCourrier's Mailbox document type can be used as a fully working  
example/starting point.

It's also worth noting that for really big sites (> 2.10^5  
documents), switching to CPSLuceneCatalog is just a matter of  
changing a widget's meta_type within CPSDashboards (basically because  
it was designed with Lucene in sight ).

---------
Georges Racinet,   Nuxeo SAS
Open Source Enterprise Content Management (ECM)
Web: http://www.nuxeo.com/ and http://www.nuxeo.org/ - Tel: +33 1 40  
33 79 87



_______________________________________________
cps-devel mailing list
http://lists.nuxeo.com/mailman/listinfo/cps-devel
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.