1. 概述
範本的載入速度受到很多因素影響,如果一個範本預覽的時候,載入較慢,該如何去分析問題原因呢?
2. 排查步驟
2.1 查看資料集查詢速度
大部分範本載入慢,都是因為 sql 執行速度比較慢。那麼如何驗證 sql 速度快慢呢?可以使用以下幾種方案。
1)在設計器的資料集中直接查詢,人為感受 sql 的執行速度-----設計器查詢慢可考慮更換驅動。
2)將範本匯出為內建資料集進行預覽,查看速度是否變快。-----匯出內建資料集後預覽變快說明是取數環境慢,優化 sql 或資料庫效能。
3)安裝 效能插件 ,使用平台裏的 sql 執行監視功能,查看 sql 執行速度以及執行次數。如果是執行次數過多導致的慢,可以試試 抽數快取 功能。
4)使用 抽數快取介紹 ,查看速度是否變快。-----開了快取變快,說明是資料集本身查詢速度不佳。
2.2 查看範本結構
排除掉 sql 原因後,接下來就應該分析下,範本元素是否過於複雜,或者有一些不合理的設定。下面列舉幾類常見的問題設定。
2.2.1 設定過多過濾
如下圖所示,第一欄為手寫,後面的欄位重複拖入,且每個都設定了過濾。例子的範本還是最簡單的,實際情況下這種結構的範本大多比較複雜,會導致大量的重複計算,影響效能。
2.2.2 過多的條件屬性/過濾/動態參數注入/形態設定
當看到範本中有大量的黃色/藍色/紅色小三角時,就可以得知範本中使用了大量的過濾和判斷或是形態設定,勢必會影響效能。
2.2.3 不合理父格設定/笛卡爾積
此類情況通常可以透過修改父格,優化範本結構來解決,可參見:防止填報笛卡爾積
2.2.4 範本中有較大的圖片
範本中如果插入了較大的圖片、展示了較多的圖片,對效能也會有一定影響,可以考慮下述優化:
使用 外置圖片插件
使用 webimage 展示圖片
2.2.5 範本展示的時候格子數量過多
當資料較多或者範本結構較複雜的時候,後台計算範本的時候會產生大量的格子數,前端展示的時候也會比較慢。所以,對於資料量,儘量不要一次展示太多資料,可以考慮分頁 sql ,或者使用 新計算引擎
2.2.6 圖表過多
大量使用圖表會造成前端渲染速度下降,瀏覽器當機,所以設計範本的時候不能濫用圖表。
2.2.7 函式的不合理使用
範本中如果使用了較多的sql函式,value函式,資料集函式等,或者sql函式本身執行的速度較慢,也會導致範本預覽變慢。
2.2.8 前端樣式
大量使用 JS 或者 CSS 語句去修改了範本元素樣式,也會對範本效能產生影響。
2.2.9 全局參數
全局參數是不管頁面是否呼叫,都會跟隨載入,對載入速度有一定影響
2.2.10 全局水印
全局水印設定是否寫了sql函式進行取數,sql函式那邊取不到資料或取數慢,所有的範本都有需要等sql函式取數逾時之後才能夠顯示出來,就導致所有的範本預覽慢,可以透過關掉全局水印進行測試
2.2.11 sheet名
注意sheet名是固定值還是公式,如果是使用公式,且公式有一些參數計算,可能會影響範本計算速度。
如果是這種情況,可以先將sheet名修改成預設值排查
2.2.12 按鈕元件裏的參數預設值計算過久
按鈕元件元件裏的參數預設值也是在初始化時計算的,不是在點選的時候才計算,如果按鈕元件裏大量呼叫sql函式,並且計算時間較久,也會對範本載入時間產生影響。比如客戶用來實現重置所有元件值的按鈕,大量呼叫sql函式用來計算元件預設值,就對範本計算產生了影響。
2.2.13 空白行
範本中存在空白行可能也會影響速度。
2.2.14 紙張背景
檢查範本紙張背景的設定,範本紙張不要設定得過大,且當紙張背景設定為紋理時,可能會影響效能。
可以考慮調整紙張大小設定和更換紙張背景設定。
3. 查看網路請求
1)可以透過F12的Network模組去查看一張範本的所有請求速度,分析是否有時間過長的請求,以及該請求的作用。
2)滑鼠懸浮Waterfall可以看到請求各個階段的時長。如果一個請求時間過長,可以先排查下是否由於做了映射導致。
3)Size列可以識別相關資源是否從快取讀取。從快取讀取的資源一般不會影響效能。
4. 其他設定
1)日誌級別
降低日誌級別,比如可從debug調整成error。
2)資料庫是否外置
內建資料庫效能較一般,可以考慮將finedb資料庫外置。
3)根據併發數調整中間軟體(比如tomcat)的執行緒數、業務資料庫的連結池。
4)關閉平台快取中的「總是重新讀取範本」按鈕。
5)安裝 效能插件
6)安裝 抽數快取介紹 :如果範本存取情況是僅首次存取慢,可以考慮安裝抽數快取插件進行優化
7)報表分頁組件插件 導致。
現象:
報表資料量大,範本載入時間長
參數面板載入很久
對於資料量大的報表,連參數面板都一直載入不出來的話可以考慮是「報表分頁組件插件」導致的,此插件計算把頁面計算邏輯放在了最前面,進而導致範本載入時間遠遠超出sql取數時間。
5. 總結
範本的載入,需要經過取數、計算、渲染等階段,每個階段都會有影響速度的因素,所以需要依次排查。在排查程式中,可以使用二分法,儘量減少範本元素,定位到對效能影響最大的部分。