XPages 为我们带来了新的开发体验,但其服务器端组件树、服务器端状态存储等特性会消耗大量的内存。Domino 8.5.2 版之后,为 HTTP JVM 分配的内存默认为64M,如果使用了较多的 XPages 的话,一般来说这个默认值是不够的。可以通过以下 Notes.ini 参数调整(增加到256M):

HTTPJVMMaxHeapSize=256M
HTTPJVMMaxHeapSizeSet=1

如果使用了较多的XPages,通常来说32位操作系统推荐设置为256M,64位操作系统+32位Domino为1024M,64位操作系统+64位Domino为物理内存的1/4。当然具体环境请酌情调整。

在实际使用 XPages 的过程中,我们发现第一次访问时会非常慢,有时候甚至要等5秒钟以上。这是因为第一次访问时需要加载一些 XPages 相关的 class,所以耗时比较长。

为了解决这个问题,在 Domino 8.5.3 中引入了 XPages 预加载功能。通过以下 Notes.ini 参数实现:

XPagesPreload=1
XPagesPreloadDB=myDb.nsf/myXPage.xsp,myDb.nsf/test.xsp

请参考:Domino Designer 8.5.3 中的新增功能

我相信只要是做开发的,就会维护别人写的代码;只要做维护代码工作,就会有全局搜索代码的需要。可惜在 Domino 开发中这不是一件容易事儿:只能先生成代码摘要,然后从摘要中搜索。而且摘要还有大小限制、又不包括计算文本的内容。

所以之前我们想了很多办法:用 DXL 导出设计元素、使用 TeamStudio 等等。从 Domino Designer 8.5 转到 Eclipse 平台以后,为我们带来了一项新的搜索功能,用法如下:

  1. 打开任意一个代理或 Script 库或 XPage
  2. 通过“搜索>搜索”菜单,或“Ctrl+H”打开搜索对话框
  3. 按下图填写条件
  4. 查看结果,双击可以打开相应的设计元素

我们之前提到过,XPages 是基于 JSF 1.1 开发的,在 JSF 中有个很重要的概念:生命周期的六个阶段

在开发 XPages 的过程中,我们经常遇到一段代码会运行很多次的情况,实际上就是在不同的阶段执行的。我们通过 LifeCycleListener 可以记录每个阶段的开始/结束,有助于我们更深入的理解 XPages。结果类似于:

HTTP JVM: Before phase: RESTORE_VIEW 1
HTTP JVM: After phase: RESTORE_VIEW 1
HTTP JVM: Before phase: APPLY_REQUEST_VALUES 2
HTTP JVM: After phase: APPLY_REQUEST_VALUES 2
HTTP JVM: Before phase: PROCESS_VALIDATIONS 3
HTTP JVM: After phase: PROCESS_VALIDATIONS 3
HTTP JVM: Before phase: UPDATE_MODEL_VALUES 4
HTTP JVM: After phase: UPDATE_MODEL_VALUES 4
HTTP JVM: Before phase: INVOKE_APPLICATION 5
HTTP JVM: After phase: INVOKE_APPLICATION 5
HTTP JVM: Before phase: RENDER_RESPONSE 6
HTTP JVM: some debug info from print()…
HTTP JVM: After phase: RENDER_RESPONSE 6

通过添加以下 Notes.ini 参数,可以抓取 LotusScript 的调用堆栈,帮助我们分析宕机等问题:

DEBUG_LS_DUMP=1

结果格式如下:

LotusScript Call Stack
<@@ ------ LotusScript Interpreter -> Call Stack for [ nlnotes:  0ef8:  1494]  (Time 10:38:14) ------ @@>

[3] COUNTVIEWS
[2] GETDBINFO @ line number 7
[1] COUNTDOCUMENTS @ line number 12
[0] INITIALIZE @ line number 2

请参考:Examining LotusScript call stack after a crash or hang with NSD

Notes/Domino 8.5.3 已于10月4日发布,包含了很多实用的新功能:

  • 版本控制支持:可以将库中的每一个设计元素通过 SVN 等版本控制系统管理
  • JavaScript/CSS 聚合:服务器自动将多个 JS/CSS 文件动态合并为一个,大大改善性能
  • XPage 预加载选项:减少首次访问 XPages 时的等待时间
  • 全文搜索排序:新的 FTSearchSorted API,同时 XPages 也支持此功能
  • XPages 控件增加 HTML5 支持:增加 attrs、type 属性

完整的新功能列表请参考:Domino Designer 8.5.3 中的新增功能IBM US Announcement Letter