哪种方法可以访问控件的最有效方法?

时间:2013-08-18 21:30:00

标签: performance xpages xpages-ssjs

在这两个选项中,我必须访问最有效的控件值吗?

getComponent("ControlName").getValue();

dataSource.getItemValue("FieldName");

我发现有时getComponent似乎没有返回当前值,但访问dataSource似乎更可靠。那么从性能角度来看,它有什么不同呢?

dataSource.getValue似乎适用于我尝试过的所有地方。但是,在使用rowData时,我似乎仍然需要执行rowData.getColumnValue(“Something”)。 rowData.getValue(“Something”)失败。

2 个答案:

答案 0 :(得分:17)

都不是。最快的语法是dataSource.getValue ("FieldName")getItemValue方法仅在文档数据源上可靠,而getValue方法不仅可用于通过视图数据源访问的视图条目(尽管在该上下文中,您可以将其传递给程序名称视图列的名称,不一定是与字段相同的名称),但也可以在您开发或安装的任何自定义数据源上使用(例如,第三方扩展库)。此外,如果您使用getItemValue,它会自动进行自动类型转换。

即使在非常简单的网页上,dataSource.getValue ("FieldName")也是getComponent ("id").getValue ()的5倍,因为正如Fredrik所提到的那样,首先必须找到组件,然后再询问它的价值是什么......在幕后,无论如何都要问数据源。因此,自己询问数据源总是会更快。

注意:相应的写入方式为dataSource.setValue ("FieldName", "NewValue"),而不是dataSource.replaceItemValue ("FieldName", "NewValue")。两者都可以,但setValue也执行与getValue相同的类型转换,因此您可以传递不严格符合旧Domino Java API的数据,并且通常只能确定值需要转换为为了“安全”Domino才能存储。

答案 1 :(得分:4)

我想说最有效的方法是直接从数据源获取值。 因为如果你使用getComponent(“ControlName”)。getValue();你将首先获得组件,然后从中获取getValue。因此,如果你问我,从数据源获得的单一信息会更有效。