整串的邏輯大約是這樣
1開始載入時 撈取下拉選單,回給前端排列畫面,並產生全域List供篩選使用
2按鈕功能觸發查詢該病患資料
3依照病患id查詢病患該表項資料
4顯示該病患該表項資料
問題
當4顯示資料的時候, 有去使用到1的下拉選單的List
但是發現, 我操作查詢該病患的表項資料速度快的時候,
會發生顯示問題, 開f12發現, 顯示需要的list並沒有撈回來, 他就已經執行篩選顯示
找尋根源問題
一開始推測, getDropdown需要更多的時間, 所以讓他在網頁中載入順序提前,
但是發現, 這還是沒有解決問題
因此, 我做了一個操作
我嘗試在下拉選單組完選單內容的最後印出"finished"字樣
好讓我知道, 什麼時候才把下拉選單組完
此時我發現, 這個finished差不多讓我等了6秒鐘
很明顯, 如果說我整套操作動作在6秒鐘內完成
很有可能會組資料的時候List還沒有準備好
因此
到底為什麼撈取dropdown會需要撈取這麼久呢?
就是這裡的核心問題
我注意到在等待dropdown回傳的過程中,
他在等待account做了很多查詢
我原本以為是權限相關
回去看code發現
原來為了取得帳號名稱
程式查找出整個account內容
因為其權限是eager撈出來的不是lazyload(當初設計上問題)
因此這邊撈出account會再重新把所有權限功能子功能run一遍
整體就是慢在這邊
解法
我使用另一個只撈id和name的Repo function, 準確的撈取我要的資料->帳號名稱
代替原本把account下面所有關聯查出來
大約看到finished在console中, 不到1秒就跑出來了
而證實拖累效能問題的確在這裡
finished!
沒有留言:
張貼留言