获取包括类别的总视图条目-性能问题 [英] Getting total View entries including categories - performance issue

查看:13
本文介绍了获取包括类别的总视图条目-性能问题的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在我的视图控件上使用自定义页脚;例如,我有:

显示1-2534200

我的基础视图是分类的,因此条目总数也应该包括类别。 到目前为止,我能够找到包括类别在内的条目总数的唯一方法是使用NotesViewNavigator;但是,性能是不可接受的,因为它需要大约27秒来计算这段代码。

我确信问题出在第var nav:NotesViewNavigator = view1.createViewNav();行,因为我添加了一些调试器信息:

start = new Date().getTime();
var viewPanel1:com.ibm.xsp.component.xp.XspViewPanel = getComponent("dataView1");
var nav:NotesViewNavigator = view1.createViewNav();
if (viewScope.VendorSrch == "" || viewScope.VendorSrch == null){
    var total =  nav.getCount(); 
}else{          
    var total = viewPanel1.getRowCount();// View can be filtered by user as well (using categoryFilter property)
}

var from =(viewPanel1.getFirst() < total? (viewPanel1.getFirst() + 1 ) : total);
var tmpTo = viewPanel1.getFirst() + viewPanel1.getRows();
var to = (tmpTo < total? tmpTo : total);

var elapsed = new Date().getTime() - start;
print(elapsed + " ms");
"</b>Displaying <b>"+ from +"</b> - <b>"+ to + "</b> of " + "<b>"+total+"</b>"

有人知道如何改进这段代码吗?

请注意,此视图中的文档还具有Readers字段,这可能会影响 此操作的性能。

推荐答案

您被困在performance hell中。读访问保护仅且仅存储在文档内部。因此,当您要求视图导航器获取计数时,它唯一的选择是打开所有涉及的文档-因此性能很差。读保护和性能是天敌(试想一下:您的办公室每扇门都上了锁,如果您有一把锁号匹配的钥匙,您每次都必须检查您所有的钥匙)。

摆脱读者字段引入的性能地狱的方法是只读取您实际需要的条目(as outlined)。如果用户可以根据名称、组成员身份和角色访问文档,这可能有点棘手(这将使每次访问只读一次),但这仍然是非常可行的。在本例中,您将使用Repeat控件和对象数据源或托管bean,因此多个过程发生在后台。

额外的诀窍:如果您添加一个公式为1的列(仅是数字)并将其相加,同时对其进行分类,那么您只需从naventry跳到下一个同级项(即下一个类别)并添加数字-->所涉及的读取次数要少得多,并且不会打开任何文档。

再次强调:nav.count需要打开所有文档,这不是一个好主意,任何需要读取访问权限才能检查的内容都不是好主意,因此使用一个(或多个)基于访问权限的viewNav(实际上只能读取用户可以读取的文档)是可行的。

如果您需要更多提示,请告诉我

这篇关于获取包括类别的总视图条目-性能问题的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆