在写LotusScript代码时考虑一点技术含量

大家好,才是真的好。

在编写LotusScript时考虑性能问题,尤其是大量数据处理时,前面我们提得也比较多,例如在循环文档时,尽量不使用getNthdocument,而使用getNextDocument等。

今天我们介绍的是LS编程技巧,就是非必要时,不使用对象。

举个例子,你访问网页时,网页下面有一个大图片,你不拉到该图片位置时,该图片不会从服务器上请求加载。

这种就是网页上常见的““lazy loading” 技术。

其实在LotusScript中也可以考虑这样做,即在非必要前不做额外工作,可以加快初始化速度,也可以节省一些性能,避免耗时操作。

例如使用当前文档,你可能不需要在视图中查找文档。

在第一次使用视图前,不需要打开视图和创建NotesView对象等;打开视图后,在完成操作前,不要丢弃视图对象;也可以使用视图缓存,除非需要更新等。

这里有一段分享的代码案例,在自定义的LotusScript类实现了上述操作原则,可供大家参考:

Class ProjectDocument
Private z_db As NotesDatabase
Private z_docProject As NotesDocument
'定义其他变量
Private z_IDView As NotesView
%REM
Property IDView (read)
描述:获取按ID排序的视图ProjectsByID,Autoupdate为false设置为视图不刷新
如果需要刷新,通过下面的IDViewUpdate方法来执行操作
%END REM
Public Property Get IDView As NotesView
If z_IDView Is Nothing Then
Set z_IDView = z_db.Getview("ProjectsByID")
z_IDView.Autoupdate = False
End If
Set IDView = z_IDView
End Property
%REM

Sub IDViewUpdate
Description: 确保视图索引都是最新的。
%END REM
Sub IDViewUpdate
If Not z_IDView Is Nothing Then
z_IDView.Refresh
End If
End Sub

%REM
Function isIDUnique
Description: 确定用户建议的ID是否已在使用中。
Arguments:
ID: 需要检查的文档ID
Returns: 如果ID是唯一,则返回TRUE
%END REM
Function isIDUnique(ByVal ID$) As Boolean
Dim docsWithID As NotesViewEntryCollection
Set docsWithID = IDView.Getallentriesbykey(ID, True)
If docsWithID.Count > 1 Then Exit Function ' returning False
If docsWithID.Count = 1 Then
Dim ent As NotesViewEntry
Set ent = docsWithID.Getfirstentry
If ent.Noteid <> z_docProject.noteid Then Exit Function
' 另一个文档已经使用该ID
End If
isIDUnique = True
End Function

%REM
Sub Save
Description: 保存对象关联的Project文档
Arguments:
%END REM

Sub Save
Call z_docProject.Save(True, False, True)
IDViewUpdate
'视图更新,保存的文档会出现在更新后的视图
End Sub
End Class

上述技术不仅可以使用到视图,也可以使用到简要表或某些值的计算中等等。

原文载于https://lotusscript.torknado.com/blog/lazy-code/

如有兴趣,欢迎查看原文。

今天就介绍到这里吧。更多文章请关注微信公号:协作者

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值