Nuxeo mailing list archives
[CPS-devel] getFolderContents: serious performance problem
Benoit Delbosc
bdelbosc at nuxeo.com
Tue Oct 24 17:39:09 CEST 2006
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.
Regards
ben
This list archive provided by Nuxeo, the
leaders of open source ECM.
Check out the Nuxeo 5 open source,
standards-based ECM project.