反饋已提交
網絡繁忙
在使用填報程式中,可能會出現一些效能問題,比如提交慢,頁面載入慢,匯入 Excel 慢,元件操作卡頓等。本文檔針對這些常見場景,結合產品現有的邏輯進行分析,幫助大家更好的發現和解決填報效能問題。
問題描述:
填報預覽的頁面,相較於分頁預覽方式,載入時間明顯變長。
填報預覽的頁面,插入刪除行時載入較慢。
注:如果分頁預覽載入也慢,可以參考範本效能問題排查方法排查。
原因分析:
由於填報預覽預設不分頁,所有資料和元素都在一個頁面上展示。所以當資料量較大時,頁面元素也會很多, 就有可能造成頁面載入慢。
解決方案:
1)透過查詢條件控制每次查詢的資料量
2)使用「填報分頁」功能
開啟「直接顯示元件」功能後,會明顯增加瀏覽器的渲染壓力。
此外,如果儲存格元件存在資料字典且有預設值,則每一個元件都會在頁面載入時傳送請求去獲取資料字典資訊,導致載入緩慢。
注:例如按鈕元件、複選按鈕元件、儲存格按鈕組元件等,不會受到「直接顯示元件」設定的影響,預設始終直接顯示,會出現上述問題。
1)關閉「直接顯示元件」,儘量不使用按鈕元件、複選按鈕元件、儲存格按鈕組元件
2)透過查詢條件控制每次查詢的資料量
3)使用「填報分頁」功能
4)不設定儲存格元件的預設值
同條件下,取數函式的效能排名為:value()>ds1.select()>sql(),如果使用了效能較差的函式,且資料量較大的話,會造成頁面載入緩慢。
1)優化 sql 本身的速度
2)使用 value() 函式
3)透過查詢條件控制每次查詢的資料量
4)使用「抽數快取」優化取數速度
11.0.2 版本開始,支援透過在url後新增參數 &async_insert=true 開啟插入行後區域性重新整理,能有效提升大數據量時的插入行速度。
元件在輸入值或者選擇值之後,頁面會長時間卡頓。
帶有資料字典設定的元件,如果資料量較大,模糊搜尋就會比較慢。
參考下拉框模糊搜尋慢的解決方案處理。
如果元件輸入資料後,需要聯動其他元件資料字典/儲存格或者寫了 JS 進行一些自訂處理,而被聯動的內容較慢的話,就會導致卡頓。
1)優化被聯動的內容,減少多餘的聯動設定。如需要使用取數函式,儘可能用 value() 函式。同條件下,取數函式的效能排名為:value()>ds1.select()>sql()。
2)使用「抽數快取」優化取數速度
3)如果是用JS給其他儲存格指派,且指派的資料量較多,可以換用批量指派API,具體用法可參考:JS實現複選按鈕元件全選和批量操作中的2.5一節
帶有資料字典設定的元件,設定了「不允許自訂值」後,每次輸入值都會觸發該校驗,去對應的資料字典搜尋。如果資料量大,就會導致卡頓。
勾選「允許自訂值」,並將相關校驗放在「填報屬性」的「資料校驗」設定中實現。
點選資料校驗,頁面卡住無回應。
Excel 批量匯入速度慢(Excel 批量匯入包括了校驗和提交2個程式)。
在資料量較大的情況下,如果設定了較多/較複雜的校驗公式,例如包含層次座標,取數函式(sql()、ds1.select()、value()等)的公式,就會導致校驗卡頓。
1)同條件下,取數函式的效能排名為:value()>ds1.select()>sql()。在條件允許的情況下,儘量使用value函式來取數,同時優化資料集sql本身的執行速度。
2)使用 「抽數快取」優化取數速度
3)在校驗公式無法簡化和減少的情況下,可以考慮分批次提交資料,減少每次提交的資料量。
存在不符合校驗條件的資料時,系統會標註出對應的儲存格,方便使用者識別和修改。但如果不符合的資料太多,標註程式會佔用較多渲染效能,造成頁面卡頓。
此情況較少,可使用「填報分頁」優化,但分頁後不符合校驗的標記只對當前頁生效。
11.0.2版本開始,點選資料校驗或者提交時,會校驗所有元件的「允許自訂值」設定。當元件資料字典中的資料量較大時,該校驗程式會佔用比較多的時間。
1)如果不需要在提交時校驗元件的「允許自訂值」設定,可以在finedb的FINE_CONF_ENTITY表中新增欄位WriteOptimizationConfig.verifyCustomValue=false來回退邏輯,使得提交時不再校驗該項設定。
2)如果需要在提交時校驗元件的「允許自訂值」設定,目前沒有特別好的方案,可以考慮減少資料字典的資料量,或者將相關校驗放在「填報屬性」的「資料校驗」設定中實現。
點選資料校驗速度較快,但點選提交速度較慢。頁面一直顯示載入中,甚至當機無回應。
在伺服器硬體較好,且填報範本為簡單結構的情況下,目前能支援的提交資料量(行*列)上限在100w左右。在此範圍內,資料量越多,提交的時間也越長。
儘量控制一次提交的資料在100w內。如果超出了,可以考慮分批次提交,減少每次提交的資料量。
當提交類型為智慧提交、刪除提交、更新提交時,在執行提交程式中會傳送帶有where關鍵詞的sql語句去根據主鍵找到對應資料,所以如果資料表已有部分資料,則該查詢動作可能耗時較長,影響整個提交的速度。
1)如果只需要插入資料,將提交類型改為插入提交。
2)如果需要更新和刪除資料,則根據填報屬性中設定的主鍵,去資料庫給對應欄位增加索引。索引改寫的欄位數量和順序都需要和填報主鍵欄位一致,否則無法發揮效果。(優先推薦)
注:可透過測試插入提交的速度來確認問題原因是否為此項,如果同樣資料插入提交較快,其他提交較慢,則大概率為此原因。
如果資料庫本身效能不是很好,也會影響提交速度。
1)優化資料庫設定
2)更換資料庫
3)若入庫的資料庫類型為 MySql,可以透過在 MySql 資料連結的 URL 後增加 rewriteBatchedStatements=true參數來開啟 MySql 資料庫的批量提交功能,進而提高提交效能。格式如下:
若 URL 中未新增過參數,直接加 ?rewriteBatchedStatements=true
若 URL 中已新增過參數,最後加 &rewriteBatchedStatements=true
如果提交入庫的表因為某些原因被鎖了,則可能導致長時間提交不入庫。此時日誌中會出現類似於Lock wait timeout exceeded等帶有lock的報錯。
在資料庫檢查入庫表是否被鎖,解鎖後再提交。
範本父子格設定不合理,造成資料以陣列*陣列形式提交,提升了提交的資料量和時間。
出現此問題時,提交時頁面會提示存在笛卡爾積,日誌中也會出現BatchDML,one of FArray的提示。
根據報錯中提示的欄位,調整其所在儲存格的父子格關係。不建議開啟「允許填報笛卡爾積」,其並不能提升效能。
匯入 Excel 時間較長,甚至頁面當機無回應。
匯入資料量大時,會明顯增加瀏覽器的渲染壓力。且如果開啟了「直接顯示元件」,則會進一步增加渲染壓力,導致匯入緩慢。
匯入時可以透過以下載入動畫的時間來確認是由於渲染慢導致。
1)使用「填報分頁」功能進行預覽和匯入 (優先推薦)
2)關閉「直接顯示元件」,儘量不使用按鈕元件、複選按鈕元件、儲存格按鈕組元件
在匯入時,會對頁面上的公式進行計算。如果公式複雜,或者涉及取數函式(sql()、ds1.select()、value()等)的話,則可能會影響匯入速度。
匯入時可以透過以下載入動畫的時間來確認是由於計算慢導致。
2)減少需要在頁面上計算的公式數量,降低其計算複雜度。
3)使用「抽數快取」優化取數速度 。
滑鼠選中內容,快速回饋問題
滑鼠選中存在疑惑的內容,即可快速回饋問題,我們將會跟進處理。
不再提示
10s後關閉
反馈已提交
网络繁忙