天天看點

Lotus開發基本性能優化

一:一般的原則

1. 視圖的數量和複雜度:盡量使用少量視圖,去掉不必要的和相似的視圖,視圖列的公式等盡量簡單化。

2. 盡量不要用@Today和@Now在視圖的選擇條件或是列公式上.

3. 資料庫的文檔數量不要太多:要及時做歸檔。

4. 文檔中域的數量:過多的域會影響索引視圖時的性能,即使該域沒有在視圖使用也會。

5. 正在修改的文檔數量:會降低視圖索引的性能。

6. 删除文檔的數量:文檔删除後會留下一個删除存根。當複制資料庫時,Notes 會使用删除存根識别并删除複本中的該文檔。 為了節省磁盤空間,Notes 會根據複制設定“删除最近 [ ] 天内未修改的文檔”,從文檔删除中清除餘下的删除存根。如果 Notes 清除了尚未複制過的删除存根,則在下次複制後已删除的文檔将再次出現。此選項位于 Notes 客戶機的“檔案”“複制”“設定”對話框中的“節省空間”面闆上。有很多時候資料庫中删除存根的數量比文檔的數量還多,這種情況一般發生在比如有一個定時代理,他做的工作是删除該資料庫中的文檔并從外面的資料源建立新文檔并存于該資料庫中,我們盡量不要做這種動作。

7.讀者域:會影響視圖性能。

8.使用者數量:很多的時候可以使用叢集。

二:資料庫級别

下面資料庫屬性對性能影響比較大

1. 不保留未讀标記

2. 保留LastAccessed屬性

3. 不支援指定的答複層次:如果該項未啟用你就不能使用@AllDescendants,@AllResponses,這兩個公式有時候會在視圖的選擇公式或複制公式中用到。

4. 禁用事務記錄

5. 優化文檔表格優化

如果你的domino資料存在DB2資料中,這并不會帶來性能的提升,他所帶來的隻是功能的增強。

另外在資料庫的ACL要限制使用者的建立個人檔案夾和視圖的權限。使用者建立的個人視圖是存在工作台檔案中的,并不是存在伺服器上,資料庫的個人視圖或檔案夾将用此圖示存儲在工作台中,而不是存儲到伺服器上的資料庫中。從工作台删除圖示将删除個人視圖或檔案夾。但是索引的時候需要将它們拉到伺服器上,是以會影響性能。

三:公式方面性能優化

大部分的公式運作的速度都是比較快的,隻有一少數部分需要時間比較長的計算,我們要注意使用,如下:

2.使用@Transform來代替@FOR和@While。

3. @Unique( textlist ),需要對比textList中的每一個值.

5.1使用緩存:我們開發的時候為了每次結果都是實時的,是以我們使用NoCache,但是正式環境中我們的更改并不會很頻繁。

5.2選擇正确的視圖進行查找.

5.3避免重複查找:

5.3.1例如 @if(@IsError(@DbLookup(“”:”NoCache”;””;”SomeView”;CustID;3);””;) @DbLookup(“”:”NoCache”;””;”SomeView”;CustID;3))

上面說了用NoCache沒必要,關鍵是上面的DbLookup要執行兩次,是以可以使用如下方式:

_tmp:= @DbLookup(“”:””;”SomeView”;CustID;3);

@if(@IsError(_tmp);””;_tmp)

或者

@DbLookup(“”:””;”SomeView”;CustID;3;[FailSilent])

5.3.2做一些必要的判斷,例如_t:=@if(@IsDocBeingEdited;@DbColumn(“”;””;”Customers”;1);@Return(@Unavailable));

@if(@IsError(_t);””;_t)

四:表單方面:

1. 表單中域的數量過多會影響性能,我們可以将域分組存在不不同的子表單中,這樣可以根據需要來進行加載。

2. 表單不要放太多的圖檔

3. 不要使用存儲表單。

4. 自動重新整理域:表單的該選項要少用,因為該選項會使表單上的計算域,輸入的驗證公式在表單編輯等時候重新計算,我們最好的方式是使用“當關鍵字改變時重新整理域”或是域的Onchange和Onblur事件。

5. 太多的共享的設計元素:使用共享的設計元素可以友善維護,但是缺點是過多會對性能有影響。Lotus Notes會有一個緩存來維護設計元素資訊,也就是說并不是每次都是讀取的原始的共享設計元素。共享操作和共享試圖列對性能是沒有影響的。

五:視圖方面

1. 視圖中的@Now和@Today:

使用@TextToTime(“Today”)是不完善的,因為這個公式隻有第一天執行。

為什麼呢?當你打開一個視圖的時候,Lotus Notes會檢視試圖索引(存儲視圖中的文檔清單和行的值),僅僅檢查上次視圖索引被更新後建立的文檔和修改過的文檔。看是否把他們加入到視圖中,或是删除,或是其列值的重新計算。

然而如果你使用@Today,舊的視圖索引就沒有用了。比如我們的選擇公式是:

這個時候視圖總是别更新為最新的。

如果你使用@TextToTime(“Today”)代替@Today,效率有了,不過就是不是最新的。這點我們可以結合視圖屬性中的索引設定來平衡。

2. 很多程式慢是因為程式中包括了很多視圖。把沒用的删除會提高速度。另外試圖列也盡量不要太多。

3. 過度複雜的公式:選擇公式。列公式 如果@For @While @Transform

4. 過度使用分類,視圖索引等

5. 讀者域:使用讀者域會降低視圖的性能,當你打開一個視圖的時候Lotus Notes會去掃描每一行來覺得你是否有權限通路,即使該視圖中你隻有一個文檔可以通路也要把整個視圖的文檔都掃描到的。

下面點是使用時要注意的:

5.1. 讀者域值盡量短,比如使用角色代替名字清單。

5.2. 如果一個視圖中隻有一兩個文檔是該使用者可以通路的,最好不要使用視圖的方法,比如你可以給他他封mail,裡面有該文檔的link。

5.3. 可以使用@SetViewInfo來顯示指定列中包含指定字元産的文檔。

5.4.使用@UserName @UserRoles在共享視圖的選擇公式或是列公式是不會得到你想要的結果

六:程式方面。

1. GetNthDocument:使用NotesDocumentCollection的GetNthDocument來循環文檔集中的文檔是非常慢的,我們可以使用GetFitstDocument和GetNextDocument方法來替代完成。

2. 如果你在視圖,表單,檔案夾中使用了過多的操作也會影響性能,因為他們每次都會将所有的代碼裝載到記憶體中。是以我們盡量把代碼寫到代理裡面,在操作中去調用代理。

3. 過多的Script庫:裝載10個Script庫的時候要大于兩次裝載5個Script庫的時間,尤其是Script中有”Use”其他Script庫的情況。

裝載兩個Script庫的時間要大于裝載一個包含同樣代碼兩的Script庫,是以我們要盡量把功能相同的代碼封裝在一起。

4. ComputeWithForm:NotesDocument的方法ComputeWithForm會自動更新文檔的計算域,但不幸的是速度非常慢,和手動設定一個新的域值相比。是以我們甯可多寫幾行代碼。

5. 将NotesView類的AutoUpdate設為false

6. NotesDocumentCollection有幾個已All結尾的方法,是對文檔集中所有的文檔做一些相關的操作,使用這些方法的速度要高于你去循環每一個文檔去做一樣的操作要快。

7. 少使用Variant類型的變量,最好使用Option Declare來限制所有的變量都要聲明。

8. 使用Profile文檔來存儲一些配置,共享的資訊.

本文轉自生魚片部落格園部落格,原文連結:http://www.cnblogs.com/carysun/archive/2008/08/09/BasicPerformance.html,如需轉載請自行聯系原作者