Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/apache-flex/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
XPages-在@DbLookup中使用@DbName_Xpages_Xpages Ssjs - Fatal编程技术网

XPages-在@DbLookup中使用@DbName

XPages-在@DbLookup中使用@DbName,xpages,xpages-ssjs,Xpages,Xpages Ssjs,对于我在XPage应用程序中使用的一些SSJS代码,我有一些@DbLookup公式。到目前为止,我一直使用@DbName()作为@DbLookup公式的第一个参数。如果我将@DbName()切换到“”(应用程序中只有一个数据库),那么@DbLookup forumlas的执行速度会更快吗? 一般来说,有没有比@DbLookup更快的替代方法?关于第一个问题:我对此表示怀疑。虽然我自己从来没有习惯使用@DbName()作为第一个参数,但如果它有很大的不同,我会感到惊讶(尽管老实说,我还没有测试过)

对于我在XPage应用程序中使用的一些SSJS代码,我有一些@DbLookup公式。到目前为止,我一直使用@DbName()作为@DbLookup公式的第一个参数。如果我将@DbName()切换到“”(应用程序中只有一个数据库),那么@DbLookup forumlas的执行速度会更快吗?
一般来说,有没有比@DbLookup更快的替代方法?

关于第一个问题:我对此表示怀疑。虽然我自己从来没有习惯使用@DbName()作为第一个参数,但如果它有很大的不同,我会感到惊讶(尽管老实说,我还没有测试过)

对于第二个问题:是的,带有一个巨大的星号。直接使用后端类应该比@DbLookup更快,但它们也明显更笨重。但是,特别是,如果您在性能敏感的情况下进行查找(例如,如果您在一个视图中进行了多次查找),那么切换到ViewNavigator可以提供很大的提升。作为一般规则,如果你能用ViewNavigator做你想做的事情,它们是最快的方法——它们只是需要花很多时间来习惯知道什么时候可以应用,什么时候不能。其次是someView.getEntryByKey和someView.getAllEntriesByKey


我见过很多人将“DbLookup”实现作为Java助手函数编写,可能主要是为了在直接编写Java时保持旧习惯,但是,如果您做得好,并在参数中提供足够的额外信息,以了解何时使用ViewNavigator是安全的,那么这也可以获得性能方面的好处。

这实际上是一个好问题

我认为当从@DbName()切换到“”时,您不会看到查找时间上的差异-这会让我非常惊讶

现在,你也在寻求可能更快的替代方案。首先,如果您有很多SSJS,由于SSJS语句的缓存有限,使用Java可能会更快(请参阅此处的更多信息:)

当引擎被Damien Katz()重写时,公式变得非常快。因此,您可能会发现一个老派的“@Dblookup(..)”(即公式-而不是SSJS)可能更快-这取决于SSJS@Dblookup()与底层API的“绑定”方式。测试应该很容易-只需编写一个Java类,该类将从getSession()返回结果。evaluate(@Dblookup(..)-您可以通过EL将其绑定到XPage(表达语言)。与往常一样,如果您想提高速度,则必须确保正在检索的数据在视图中。然后,代码将只读取视图索引。如果您引用的项目不在视图索引中,则必须打开基础便笺-如果其上有附件,则其速度可能会非常慢!!!以艰苦的方式吸取了教训几年前

我尝试过使用getAllEntries与使用ViewNavigators从视图中读取数据。在我尝试过的示例中,我不能说使用ViewNavigators更快,尽管理论上我认为应该更快。您可能希望将此方法与上面的评估方法进行比较

现在,还有其他选择——取决于应用程序的逻辑。我使用MVC模式(在这里可以找到一个完成了一半的演示应用:)。在这种模式中,我将Java对象中的所有数据缓存在内存中。因此,我只读取一次,然后在内存中获取版本。在创建或更新数据时,我也会更新内存表示。内存中的查找(使用映射)速度非常快!但这同样取决于应用程序中的逻辑

如果您有一些有趣的发现,请告诉我们;-)


/John

Paul Della Nebbia实际上对@DbLookup和ViewEntryCollection类做了一些测试。@DbLookup慢了一点。正如其他人所说,它不是Notes dev中的@Formula。它是传递给VariableResolver和PropertyResolver并映射到一组Java类和函数、每个属性映射的关键字ped映射到Java类,因此“[FailSilent]”映射到“如果找不到任何内容,则返回null”的代码


在@DbName()与“”的对比中,是不使用“”的一个很好的理由。如果您想使用该应用程序或XPiNC中的代码,它将失败。因此,最好养成使用@DbName()的习惯,或者更好的是,Jesse,有趣的是你看到了使用viewnavigators的改进。我一周前刚从一个视图中读取了许多条目。差异并不显著-使用两种不同的方法连续运行相同代码3-4次,差异更大。因此,如果你不想,可能收益更大o查找少量条目?我认为,在大多数情况下,这都是一种清洗。ViewNavigator真正为我带来回报的地方是,自从我非常习惯它们,并开始根据它们的优势调整我的视图和代码(类别、读取已存在的总数等).正如Paul提到的,XPiNC是不同之处。尤其是@DbName()也会失败,因为它返回的是本地服务器,而不是从……ViewEntryCollection或DocumentCollection类打开的服务器XP。此外,正如Jesse所说,如果使用ViewNavigators是一个可行的选项,ViewNavigators已经过优化,以获得更好的性能。不确定原始答案会发生什么!