← 所有文章

FIELD NOTES / 資料記錄與報表

儀表板快取延遲如何顯示資料最後更新時間

資料記錄與報表作者:站長預估 5 分鐘閱讀

把來源時間、快取產生與畫面取得分開,讓儀表板準確呈現資料年齡與停更狀態。

本文目錄

畫面剛刷新不代表量測剛更新

儀表板每五秒轉一次更新圖示,畫面上的產量卻可能仍是兩分鐘前的快取。先把畫面刷新時間與資料時間分開顯示,使用者才知道數值有多舊。把現在時間寫成「最後更新」,只證明前端執行過程式,不能證明設備有新資料。

列出資料經過的層次:設備採集、閘道接收、資料庫、後端彙總快取、HTTP回應與瀏覽器畫面。每一層可能有自己的刷新週期與失敗狀態。找延遲時沿著這條路比對,不要一開始就把瀏覽器快取全部關掉。

適用於工業網頁儀表板與一般監控報表,HTTP快取概念依RFC 9111,OPC UA時間欄依其DataValue定義。本文不指定HMI內建系統變數;實際產品提供哪一種時間與品質資訊,要先查清楚再標籤。

先定義顯示的「資料時間」究竟是事件發生、採集確認、來源值改變還是資料集合截止時間。值長時間不變時,來源時間可能維持不變,但採集仍正常;要搭配心跳或確認時間,不能只憑值時間久就直接宣告通訊斷線。

用四個時間看出延遲在哪裡

假設某筆採集證據時間十點零分零秒,閘道十點零分一秒接收,後端十點零分五秒產生快取,瀏覽器十點零分三十秒取回並顯示。在時鐘已同步且時間語意一致的前提下,該採集證據距顯示三十秒,不能因HTTP剛回覆就標成零秒前。

畫面可顯示「資料確認於10:00:00、目前資料年齡30秒、畫面取得於10:00:30」。彙總報表則顯示統計截止時間與快取產生時間。欄位名稱依真實來源選擇,沒有採集確認時間就不要把事件改變時間冒充它。

另有資料庫最新事件已到十點零分二十秒,但快取仍以十點零分零秒為截止點,代表後端彙總尚未刷新。若快取已更新而瀏覽器仍顯示舊版本,才進一步查HTTP中介快取、前端狀態或舊請求覆蓋新請求。

完成後讓測試資料每次更新帶一個遞增版本或已知變化,逐層記錄時間與版本。不要只用一直等於一百的產量測試,因為相同數值可能來自新資料,也可能來自舊快取,肉眼無法區分。

時鐘不同步時,負的資料年齡不應硬改成零後當正常。顯示時鐘不可信或時間待核對,並分別保存來源與接收時間。前端可用本地單調計時追蹤收到回應後的經過時間,但不能藉此消除未知的跨設備時鐘偏差。

HTTP新鮮度與工業資料新鮮度不同

HTTP快取的Age表示回應在快取鏈中估計經過的時間,不是感測器資料的年齡。回應可能剛由後端生成,但內容本來就是一小時前的設備資料;Age接近零仍不代表設備值即時。應在資料內容中傳回明確的來源時間與品質。

Cache-Control中的no-cache通常要求使用前重新驗證,並非完全不能保存;no-store要求不儲存該交換內容。兩者都不會強迫資料庫或PLC立刻產生新量測。快取政策要依畫面用途設定,不能以更改HTTP標頭代替採集健康檢查。

伺服器回覆內容未變,也不等於工業值剛量過。條件式驗證只說明所驗證的表示內容仍符合伺服器條件,若後端資料已停更,仍可能一直得到相同表示。前端繼續累計來源年齡,不要每次成功驗證都把數值當成剛採集。

快取鍵需包含影響內容的來源、時間範圍、單位或版本等條件。兩個設備共用錯誤快取鍵,可能看起來像延遲,實際上卻取到別台資料。依使用者權限分隔回應的機制也要核對,不能只在前端隱藏來源欄位。

多張卡片更新週期不同時,每張卡片顯示自己的時間或品質,整頁另列最舊資料狀態。不能拿更新最快的一張卡片時間當全頁最後更新,讓停更的設備看起來也正常。若整頁要求一致快照,後端要傳共同快照識別。

把過期 失敗與舊回應分開處理

先按需求訂定資料年齡門檻。教學例子規定確認時間超過三十秒顯示過期,這不是所有設備通用的標準;更新週期、死區與業務用途不同,門檻也不同。過期時保留最後值並明示時間,或按需求隱藏值,但不能默默顯示為即時。

請求失敗後,畫面顯示「取得失敗,仍顯示上次資料」,並讓資料年齡持續增加。重試成功只表示拿到新回應,還要核對資料版本與來源時間是否真的前進。歷史補送可能是剛收到的舊事件,也不能因此更新即時卡片的新鮮度。

若前一個慢請求比後一個快請求更晚返回,前端應依請求範圍與版本避免舊結果覆蓋新結果。使用者切換設備時,舊設備的回應也不能落到新設備卡片;這種錯位不是提高刷新頻率能解決的。

失敗時先查來源是否前進,再查資料庫、彙總快取、HTTP回應與畫面狀態。驗收故意停止後端更新、保留快取、恢復來源並讓請求亂序,確認每一步的時間標示與狀態都正確。測試應在隔離環境,不干預正式採集。

匯出的報表與截圖也保留資料時間和品質,不只留下擷取當下的電腦時間。交班者若只能看到一張靜態圖,仍應能判斷那是何時的資料,以及當時是否已經過期。

練習與常見問題

練習:資料確認時間為14:00:00,快取產生14:00:10,畫面取得14:00:45,且各時鐘可信。應顯示資料年齡四十五秒;即使HTTP剛成功,也不能顯示零秒。若門檻三十秒,狀態應標過期並保留原時間。

問:刷新圖示轉動就代表設備正常嗎?答:只代表前端流程有動作,需核對來源與採集證據。

問:停用瀏覽器快取能解決所有延遲嗎?答:後端彙總與來源停更仍可能存在。

問:值沒有變就一定是舊資料嗎?答:不一定,要看採集確認、心跳與品質語意。

問:整頁只放一個更新時間可以嗎?答:僅在確實代表共同快照時合適,否則各來源需要各自標示。

參考:RFC 9111 HTTP Caching:Age及快取控制的正式語意。

參考:OPC UA Part 4 DataValue:來源時間、伺服器時間與品質。

延伸閱讀